Я пытаюсь описать отношения SQLAlchemy, которые существуют в устаревшей схеме SQL. Я перевел схему на:
class Lang(Base):
__tablename__ = "tblLang"
id = Column("ID", Integer, primary_key=True)
# ...
class ItemName(Base):
__tablename__ = "tblItemName"
# ItemName has a composite primary key
id = Column("ID", Integer, primary_key=True)
lang_id = Colunm("Lang", Integer, ForeignKey("Lang.id"), primary_key=True)
name = Column("Name", String)
class Item(Base):
__tablename__ = "tblItem"
id = Column("id", Integer, primary_key=True)
inventory = Column("Inventory", Integer)
# item_name_id specifies only part of the table
# relationship
item_name_id = Column("ItemNameID", Integer, ForeignKey("tblItemName.ID"))
# lang_id should come from outside the database:
# a user preference stored in a configuration file
# or a session cookie, etc.
item_name = relationship(???)
То есть у нас есть известный набор языков. Для каждого элемента может быть имя элемента на одном или нескольких языках, но lang_id
, который мы должны выбрать, будет задан внешним параметром.
I sh, чтобы можно было создать запрос объект, значение которого было установлено до выполнения запроса.
Мой вопрос: Что я должен поставить вместо ???
в приведенном выше коде, чтобы можно было создать такой запрос, и как Я указываю lang_id
до времени выполнения?
Редактировать:
За @ sanya sh комментарий ниже: вот Пример запроса, который я надеюсь получить:
SELECT tblItemName.Name, tblItem.Inventory
FROM tblItem
LEFT JOIN tblTiemName
ON tblItemName.ID = tblTiem.NameID
AND tblItem.Lang = :lang
с :lang
, уже установленным на 2
(получено из пользовательских настроек)
При записи что-то вроде:
query = session.query(Item).with_entities([
Iten.c.item_name.name,
Item.c.inventory
])