让我们说,我有一个数据库结构,有三个表,如下所示:
- 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],})