我目前正在为一个项目评估SQLAlchemy。这是我的架构:
现在,假设每个请求都有当前可用的语言ID(例如,通过线程变量...),我需要SQLAlchemy自动加入TRANSLATION表,因此具有当前语言的文本字段。类似的东西:
class Book(Base):
id = Column(Integer, primary_key=True)
title = TranslatableText()
abstract = TranslatableText()
检索时,ORM会自动使用当前语言ID加入TRANSLATION表,而my_book.title会以当前语言为我提供标题。
我还需要这个来处理关系:如果一个类包含其他类的外键,这些类也包含可翻译的文本字段,那么理想情况下我也会喜欢检索它们。
最后,我还需要能够访问每个字段的TRANSLATION_ID,例如通过my_book.title_translation_id。
我不期待一个完整的解决方案,但我想知道这样的事情是否可行,以及从哪里开始。
答案 0 :(得分:0)
您必须使用http://docs.sqlalchemy.org/en/latest/orm/extensions/declarative.html#mixin-and-custom-base-classes
的概念创建一个顶级类并编写一些函数,如读,写和创建。始终调用该函数来创建或读取数据库中的数据。
如果您不想实现mixin类,那么您也可以使用事件http://docs.sqlalchemy.org/en/latest/orm/events.html#sqlalchemy.orm.events.MapperEvents.translate_row