Python 使用关系SQLAlchemy存储字符串数组

Python 使用关系SQLAlchemy存储字符串数组,python,arrays,string,sqlalchemy,relationship,Python,Arrays,String,Sqlalchemy,Relationship,我需要将对象存储在关系数据库中,这些对象的一些属性是字符串数组。 问题是我使用的MariaDB不支持数组类型。目前,我正在使用JSON解析“技巧”将数组存储为我解析的字符串,但由于我需要指定最大字符串长度,如果数组超过某个大小,则此技巧不适用于每个数组 对于自定义对象的数组,我使用的是SQLAlchemy提供的关系模式,但我无法对字符串执行相同的操作。似乎总是需要一个对象主键来将一对多关系存储在另一个表中,但在存储字符串的情况下,我没有主键,我也不想将字符串放入自定义对象中,只想为关系设置一个键

我需要将对象存储在关系数据库中,这些对象的一些属性是字符串数组。 问题是我使用的MariaDB不支持数组类型。目前,我正在使用JSON解析“技巧”将数组存储为我解析的字符串,但由于我需要指定最大字符串长度,如果数组超过某个大小,则此技巧不适用于每个数组

对于自定义对象的数组,我使用的是SQLAlchemy提供的关系模式,但我无法对字符串执行相同的操作。似乎总是需要一个对象主键来将一对多关系存储在另一个表中,但在存储字符串的情况下,我没有主键,我也不想将字符串放入自定义对象中,只想为关系设置一个键

我想要的是储存这样的东西

class MyObject:
    def __init__(self, id, array_of_str):
        self.id = id
        self.array_of_str = array_of_str
像这样:

# Table that stores the MyObject instances
my_objects_table = Table(
    'my_object', metadata,
    Column('id', String(50), primary_key=True)
)

# Table that stores all the strings, linked to the MyObject instances
my_objects_arrays_of_strings_table = Table(
    'my_object_id', metadata,
    Column('my_object_id', String(50), ForeignKey('my_object.id')),
    Column('str_value', String(100))
)

mapper(
    MyObject, my_objects_table,
    properties={
        'array_of_str': relationship(
            # Problematic part
            # How to specify that the values to get are in the 'str_value'
            # column and that they should be associated with a specific object
            # identified by its ID.
        )
    }
我希望我的问题足够清楚。实际上,这个问题对于所有其他基元类型都是一样的


提前感谢您的帮助

“因为我需要指定一个最大字符串长度,所以如果数组超过某个大小,这个技巧并不适用于每个数组”-SQLAlchemy的“mysql”方言可以与
LONGTEXT
数据类型一起使用,该数据类型允许最大4 GiB。这还不够满足你的需要吗?我知道我可以增加专栏的篇幅。。我可能永远也达不到4 GiB的极限,但我想可能有更干净的方法。如果我想对我的表执行简单的SQL操作,该怎么办?我不能,因为我的数据被编码了……“如果我想在我的表上做简单的SQL操作呢?”——在这种情况下,你可以考虑使用JSON列类型,如果它在你的特定环境中可用的话。(我知道它在最新版本的MySQL中可用;不确定MariaDB,但我认为很可能。)“因为我需要指定一个最大字符串长度,如果数组超过一定的大小,这个技巧并不适用于每个数组”-SQLAlchemy的“MySQL”方言可以与
LONGTEXT
数据类型一起使用,该数据类型允许最大4 GiB。这还不够满足你的需要吗?我知道我可以增加专栏的篇幅。。我可能永远也达不到4 GiB的极限,但我想可能有更干净的方法。如果我想对我的表执行简单的SQL操作,该怎么办?我不能,因为我的数据被编码了……“如果我想在我的表上做简单的SQL操作呢?”——在这种情况下,你可以考虑使用JSON列类型,如果它在你的特定环境中可用的话。(我知道它在MySQL的最新版本中可用;我不确定MariaDB是否可用,但我认为很有可能。)