假设我有一个包含三个表的数据库结构,如下所示:
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 添加 item_id 和 attribute_id ,不可能向 Item 对象添加属性。
我想要通过 SQLAlchemy 实现的目标是可能的吗?是否有更好的方法来构建数据库以获得“动态列”的相同行为?