python – 如何使用SQLAlchemy映射一个类与多个表?
发布时间:2020-12-16 23:40:04 所属栏目:Python 来源:网络整理
导读:让我们说,我有一个数据库结构,有三个表,如下所示: items - item_id - item_handleattributes - attribute_id - attribute_nameitem_attributes - item_attribute_id - item_id - attribute_id - attribute_value 我希望能够在SQLAlchemy中做到这一点: item
让我们说,我有一个数据库结构,有三个表,如下所示:
items - item_id - item_handle attributes - attribute_id - attribute_name item_attributes - item_attribute_id - item_id - attribute_id - attribute_value 我希望能够在SQLAlchemy中做到这一点: item = Item('item1') item.foo = 'bar' session.add(item) session.commit() item1 = session.query(Item).filter_by(handle='item1').one() print item1.foo # => 'bar' 我是SQLAlchemy的新手,我在文档(http://www.sqlalchemy.org/docs/05/mappers.html#mapping-a-class-against-multiple-tables)中发现了这一点: j = join(items,item_attributes,items.c.item_id == item_attributes.c.item_id). join(attributes,item_attributes.c.attribute_id == attributes.c.attribute_id) mapper(Item,j,properties={ 'item_id': [items.c.item_id,item_attributes.c.item_id],'attribute_id': [item_attributes.c.attribute_id,attributes.c.attribute_id],}) 它只将item_id和attribute_id添加到Item,并且不可能向Item对象添加属性. 我正试图用SQLAlchemy实现可能吗?有没有更好的方式来构建数据库以获得与“动态列”相同的行为? 解决方法
这被称为
entity-attribute-value模式.在SQLAlchemy示例目录下有一个例子:
vertical/.
如果您使用PostgreSQL,那么还有一个可以存储字符串到字符串映射的hstore contrib模块.如果您有兴趣,那么我有一些自定义类型的代码,可以通过SQLAlchemy使用它来存储扩展属性. 存储自定义属性的另一个选项是将它们序列化为文本字段.在这种情况下,您将失去通过属性过滤的能力. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |