items - item_ID - item_handleattributes - attribute_ID - attribute_nameitem_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使用它来存储扩展属性.
存储自定义属性的另一个选项是将它们序列化为文本字段.在这种情况下,您将失去通过属性过滤的能力.
总结以上是内存溢出为你收集整理的python – 如何使用SQLAlchemy映射一个类与多个表?全部内容,希望文章能够帮你解决python – 如何使用SQLAlchemy映射一个类与多个表?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)