Python 在sqlalchemy中,哪种列类型支持列表?

Python 在sqlalchemy中,哪种列类型支持列表?,python,python-3.x,list,sqlalchemy,Python,Python 3.x,List,Sqlalchemy,我目前正在为太阳活动区域建立一个数据库,其中一列应该获得区域编号,目前,我已通过以下方式声明: noaa_number = sql.Column(sql.Integer, nullable=True) 然而,由于随着区域的发展,可能会分配一个新的编号,那么哪种列类型会更好地支持一个列表来保存给定区域给定的所有编号?因此,不要有如下条目: noaa_number = 12443 我可以将结果存储为: #a simple entry noaa_number = [12443] #or multi

我目前正在为太阳活动区域建立一个数据库,其中一列应该获得区域编号,目前,我已通过以下方式声明:

noaa_number = sql.Column(sql.Integer, nullable=True)
然而,由于随着区域的发展,可能会分配一个新的编号,那么哪种列类型会更好地支持一个列表来保存给定区域给定的所有编号?因此,不要有如下条目:

noaa_number = 12443
我可以将结果存储为:

#a simple entry
noaa_number = [12443]
#or multiple results
noaa_number = [12444,12445]
其中列表中的这些元素将是整数

我正在检查,我的最佳想法是将此列作为字符串,并解析其中的所有数字。虽然这样做很好,但我想知道是否有更好更合适的方法。在某些情况下,您可以使用。这确实是一种存储非常特定数据的好方法。例如:

class Example(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    my_array = db.Column(db.ARRAY(db.Integer())

# You can easily find records:
# Example.my_array.contains([1, 2, 3]).all()
# You can use text items of array
# db.Column(db.ARRAY(db.Text())
# let's imagine that we have some meta history
history = db.Column(
        CompositeArray(
            CompositeType(
                'history',
                [
                    db.Column('message', db.Text),
                ]
             )
        )
# example of history type:
CREATE TYPE history AS (
   message text
);
还可以使用(sqlalchemy_utils)将自定义数据库类型用作数组项。例如:

class Example(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    my_array = db.Column(db.ARRAY(db.Integer())

# You can easily find records:
# Example.my_array.contains([1, 2, 3]).all()
# You can use text items of array
# db.Column(db.ARRAY(db.Text())
# let's imagine that we have some meta history
history = db.Column(
        CompositeArray(
            CompositeType(
                'history',
                [
                    db.Column('message', db.Text),
                ]
             )
        )
# example of history type:
CREATE TYPE history AS (
   message text
);
注意!不确定是否使用sqlite,但使用postgres应该可以 好的


希望这能有所帮助。

听起来您最好使用一个单独的表,在该表中可以将任意数量的区域编号映射到给定的区域。请看一下文档的这一部分:在本例中(我认为)并非如此,因为这些数字对应于构成观察窗口的同一数据系列。因此,我导出并存储在其他表中的属性将对应于这两个数字给出的区域。然而,偶尔也有合法的理由违反规则。如果您使用的是PostgreSQL后端,则有一个可以使用的方法。@Chicrala在某些特定情况下可以使用。示例:
db.Column(postgresql.ARRAY(db.Integer()),)
@DanilaGanchar我正在使用sqlite,所以我想我需要为postgre进行更改。无论如何,这回答了我想的问题,因为它说明了可以使用哪种case数组。我想你应该把它作为答案贴出来,这样我就可以给你学分了