最近我一直在和Pylons一起工作,非常喜歡SQLAlchemy模型進行數據庫交互。我的網站有一部分雖然我認爲可以從EAV模式中受益。如何結合SQLAlchemy和EAV DB模式的awesomness?
以此爲我的表例如:
id | userid | type | value
---+--------+--------|------------
1 | 1 | phone | 111 111 111
---+--------+--------|------------
2 | 1 | age | 40
我可以手動運行之類的查詢下面來提取和更新數據:
SELECT value FROM table WHERE userid=1 AND type='phone'
UPDATE table SET value=41 WHERE userid=1 AND type='age'
這很容易和作品......但手動構造查詢不是我的首選方法。我想使用SQLAlchemy創建我的表模型並讓它完成所有工作。
如果我要使用標準架構,每個type
有它自己的專欄中,我能做到以下幾點:
data = Session.query(People).filter_by(id=1).first()
print data.age
我:
class People(Base):
__tablename__ = 'people'
id = Column(Integer, primary_key=True)
userid = Column(Integer, ForeignKey('users.id'))
phone = Column(Unicode(40))
age = Column(Integer)
然後,我可以使用拔出數據希望能夠爲我的EAV模式做同樣的事情。所以基本上,我需要一種擴展SQLAlchemy的方法,並告訴它,當我打電話給data.age
時,實際上這意味着我需要SELECT value FROM table WHERE id=1 AND type='age'
。
這是可行的嗎?或者我會被迫用手動發佈的查詢混亂我的代碼?