小编tot*_*ote的帖子

如何使用SQLAlchemy将一个类映射到多个表?

假设我有一个包含三个表的数据库结构,如下所示:

items
 - item_id
 - item_handle

attributes
 - attribute_id
 - attribute_name

item_attributes
 - item_attribute_id
 - item_id
 - attribute_id
 - attribute_value
Run Code Online (Sandbox Code Playgroud)

我希望能够在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'
Run Code Online (Sandbox Code Playgroud)

我是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],
})
Run Code Online (Sandbox Code Playgroud)

它只将item_id和attribute_id添加到Item中,并且无法向Item对象添加属性.

我正在尝试用SQLAlchemy实现什么?是否有更好的方法来构建数据库以获得"动态列"的相同行为?

python database database-design sqlalchemy

9
推荐指数
2
解决办法
4902
查看次数

标签 统计

database ×1

database-design ×1

python ×1

sqlalchemy ×1