SQLAlchemy的多语言文本字段

时间:2012-02-10 20:02:32

标签: sqlalchemy

我目前正在为一个项目评估SQLAlchemy。这是我的架构:

  • 一个LANGUAGE表,每行支持一行
  • 带有(ID,LANGUAGE_ID,STR)
  • 的TRANSLATION表
  • 各种表格将存储TRANSLATION_ID,而不是存储文本,例如,BOOK(ID,TITLE_TRANSLATION_ID,ABSTRACT_TRANSLATION_ID)

现在,假设每个请求都有当前可用的语言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。

我不期待一个完整的解决方案,但我想知道这样的事情是否可行,以及从哪里开始。

1 个答案:

答案 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