У меня две таблицы.
class ProductCatsTranslations(db.Model):
__tablename__ = 'productcats_translation'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.Unicode(100))
catid = db.Column(db.Integer, db.ForeignKey('productcats.id'))
language_code = db.Column(db.Unicode(5), default='en')
class ProductCats(db.Model):
__tablename__ = 'productcats'
id = db.Column(db.Integer, primary_key=True)
translation = db.relationship('ProductCatsTranslations', backref='productcat')
...
def get(self, lang="en"):
categories = db.session.query(ProductCats).join(ProductCatsTranslations, ProductCats.translation).\
filter(ProductCatsTranslations.language_code==lang)
return categories
Проблема; Categories [0] .translation по-прежнему имеет все языки, лучше это список всех языков. Не имеет значения, использую ли я «uselist = False» в качестве параметра Relationshiop. Как это происходит, он выбирает все, в то время как прямой дамп оператора имеет следующий запрос, который кажется правильным и ожидаемым, который выбирает только ожидаемый вывод для одного языка. В этом случае используется с get (lang = 'es').
Но экземпляр Categories.translation по-прежнему имеет все три языка (en, es, de) в списке переводов.
print(len(categories[0].translation))
3
SQL оператор из того же объекта:
categories.statement.compile(compile_kwargs={"literal_binds": True}))
SELECT productcats.id, productcats.foldername, productcats.gender productcats.active
FROM productcats JOIN productcats_translation ON productcats.catid = productcats_translation.catid
WHERE productcats_translation.language_code = 'es'
plain SQL запрос выше возвращает правильный результат только для одного языка
Что я пропустил?