問題はトピックのヘッダーにあります。詳細はこちらです。
私はFlask-SQLAlchemyとPostgreSQLを使用しており、データベーススキーマは次のようになっています。
class Settings(db.Model):
id = db.Column(db.Integer, primary_key=True)
key = db.Column(db.String(), unique=True)
lang = db.relationship('Lang', order_by='Lang.id')
def __init__(self, key, lang):
self.key = key
self.lang = lang
def __repr__(self):
return '<Settings %r, %r>' % (self.key, self.lang)
class Lang(db.Model):
__tablename__ = 'settings_lang'
id = db.Column(db.Integer, primary_key=True)
lang = db.Column(db.String(2))
value = db.Column(db.Text())
parent_id = db.Column(db.Integer, db.ForeignKey('settings.id'))
def __init__(self, lang, value):
self.lang = lang
self.value = value
def __repr__(self):
return '<Lang %r, %r>' % (self.lang, self.value)
私は次のようなクエリを使用します:
for data in db.session.query(Settings).join(Lang).filter(Lang.lang.contains('en')).all():
print data
また、「en」言語の設定のみが返されることを期待してください。しかし、代わりに私はすべての言語を取得します。
何が問題になる可能性があり、どのように対処するのですか?
UPD:SQL出力
SELECT settings.id AS settings_id, settings.key AS settings_key
FROM settings JOIN settings_lang ON settings.id = settings_lang.parent_id
WHERE settings_lang.lang LIKE '%%' || %(lang_1)s || '%%'
{'lang_1': 'en'}
SELECT settings_lang.id AS settings_lang_id, settings_lang.lang AS settings_lang_lang,
settings_lang.value AS settings_lang_value,
settings_lang.parent_id AS settings_lang_parent_id
FROM settings_lang
WHERE %(param_1)s = settings_lang.parent_id ORDER BY settings_lang.id
{'param_1': 1}
settings_langの行の例:
id parent_id lang value 1 1"en""研究" 2 1"ru""НПП"