2012-11-25 37 views
4

所以我试图建立一个数据库,其中的行将经常修改。例如,每隔一小时,我想为数据库的特定部分添加一个数字。因此,如果self.checkmarks被输入数据库相当于3,什么是最好的方式来更新这部分的数据库与一个增加的数字,使self.checkmarks现在等于3, 2?我试图建立列db.Array但得到一个属性错误:SQLalchemy数据库列应该包含数据数组的模型是什么?

AttributeError: 'SQLAlchemy' object has no attribute 'Array'

我已经找到了如何更新数据库,但我不知道通过添加到列表中,而不是替换更新的最佳方式。我的方法是如下的,但我不认为append会起作用,因为该列不能是一个数组:

ven = data.query.filter_by(venid=ven['id']).first() 
ven.totalcheckins = ven.totalcheckins.append(ven['stats']['checkinsCount']) 
db.session.commit() 

提前

+1

您是否熟悉SQLAlchemy(或通用关系数据库)上的[relationships](http://docs.sqlalchemy.org/en/rel_0_7/orm/relationships.html)? –

+0

我在文档中阅读了一些关于它们的内容,但不是真的。这是值得探索尝试和实现这种效果? – zch

+3

是的。在这种情况下,一对多关系正是你想要的。 SQLAlchemy的文档是** excelent **,我建议你先阅读。您会看到,我在第一条评论中发布的链接中解释的第一个案例正是您想要的:您需要为您的“checkmarks”添加一个额外的表,该表与您的父表具有外键关系。当你定义一个涉及两个表的关系时,SQLAlchemy会自动将它映射到一个集合。 –

回答

5

非常感谢如果你真的想有一个Python列表的列在SQLAlchemy的,你会希望有一个看看PickleType

array = db.Column(db.PickleType(mutable=True)) 

请注意,你将不得不使用mutable=True参数可以编辑列。 SQLAlchemy会自动检测更改,并在您提交时立即保存。

如果你想泡菜是人类可读的,你可以把它与JSON或其他转换器结合起来,以满足你的目的。

+0

使用PostgreSQL,您可以使用[ARRAY](http://docs.sqlalchemy.org/en/rel_0_9/dialects/postgresql.html#sqlalchemy.dialects.postgresql.ARRAY)列类型 – kolypto

+0

请参阅[ScalarListType提供的通过SQLAlchemy-utils](http://sqlalchemy-utils.readthedocs.org/en/latest/data_types.html#module-sqlalchemy_utils.types.scalar_list)。这非常方便! – hangtwenty

相关问题