Jak zmapować jedną klasę przeciwko wielu stołom za pomocą SQLAlchemy?

Powiedzmy, że mam strukturę bazy danych z trzema tabelami, które wyglądają tak:

items
 - item_id
 - item_handle

attributes
 - attribute_id
 - attribute_name

item_attributes
 - item_attribute_id
 - item_id
 - attribute_id
 - attribute_value

Chciałbym móc to zrobić w 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'

Jestem nowym użytkownikiem SQLAlchemy i znalazłem to w dokumentacji (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],
})

Dodaje tylko Item_id i attribute_id do Item i nie można dodawać atrybutów do obiektu Item.

Czy to, co próbuję osiągnąć, jest możliwe dzięki SQLAlchemy? Czy istnieje lepszy sposób na strukturę bazy danych, aby uzyskać takie samo zachowanie „kolumn dynamicznych”?

questionAnswers(2)

yourAnswerToTheQuestion