mysql - 如何确定存储可变字符串的字段的长度?

时间:2016-05-14 11:56:14

标签: python mysql json sqlalchemy

我正在开发一个iOS应用程序,我使用Flask(一个Python框架)来构建我的后端。

我将数据存储在mysql数据库中。

现在我需要在一个属性中存储一堆ID。

首先,我将存储ID的数组转换为JSON格式对象。

然后我遇到了一个问题。 如何存储此对象?

由于对象的长度可能相当大(我无法确定我存储了多少个ID),而SQLAlchemy 要求属性具有完全长度,因为我创建了表,那么如何确定属性的长度?

2 个答案:

答案 0 :(得分:3)

如果您使用MySQL 5.7或更新版

你应该看一下新的JSON type

您可以通过sqlalchemy的type.JSON使用此MySQL功能。这将大大简化列数据管理。

data_table = Table('data_table', metadata,
Column('id', Integer, primary_key=True),
Column('loosely_related_ids', JSON)
)

with engine.connect() as conn:
    conn.execute(
        data_table.insert(),
        loosely_related_ids = [1, 54, 56, 99, 104]
    )

稍后访问loosely_related_ids字段将返回您正常访问的python数组。

如果您使用的是旧版本的MySQL

您应该使用TEXT字段或类似类型的包装器。

SQLAlchemy提供PickleType field,它在BLOB字段之上实现,并将为您处理数组的pickle和unpickling。请记住,酸洗python对象的所有注意事项以及在解释器之间共享它们仍然适用于此。

答案 1 :(得分:1)

我不清楚你遇到的情况,但是不建议在一列中存储多个记录,在ID ownerID之间构建关系图更加规范化。

例如,您可以创建一个名为“ID”的新表,其架构如下:

id int auto increment ,
idbla varchar(<Your ID Length>)
owner int not null

当您尝试获取某个用户idbla的所有x时,您可以使用

SELECT * idbla from IDs where owner = x

另一种选择:

您可以使用nosql(非关系数据库)存储您的数据,它的文档非常适合您的情况。