使用 SQLAlchemy ORM (0.8) 搜索 HSTORE 列的正确语法是什么?

chr*_*kso 6 python sqlalchemy flask flask-sqlalchemy hstore

我正在使用带有flask-sqlachemy 扩展的flask。

正在尝试搜索具有特定值的 hstore 键的所有记录。

以下是该列的设置:

from flask.ext.sqlalchemy import SQLAlchemy
from sqlalchemy.dialects.postgresql import HSTORE
from sqlalchemy.ext.mutable import MutableDict

db = SQLAlchemy()

class BookDB(db.Model):

    attributes = db.Column(MutableDict.as_mutable(HSTORE), nullable=False, default={ 'disabled' : '0'}, index=True)
Run Code Online (Sandbox Code Playgroud)

这是我正在运行的查询:

results = BookDB.query.filter_by(attributes={ 'disabled' : '0' }).all()
Run Code Online (Sandbox Code Playgroud)

这没有错误,但没有发现任何结果。

如果我做:

results = BookDB.query.filter_by(attributes['disabled']='0').all()
Run Code Online (Sandbox Code Playgroud)

我收到错误消息:“语法错误:关键字不能是表达式”

如果我使用 filter() 而不是 filter_by(),我可以做到

results = BookDB.query.filter(BookDB.attributes['disabled']=='0').all()
Run Code Online (Sandbox Code Playgroud)

这工作正常并产生正确的结果。

但是它与 filter_by() 一起使用的语法是什么?

dav*_*ism 4

filter_by只是比较简单字段相等时的一个方便的快捷方式。它只接受关键字参数,因此只接受有效的 Python 名称。在这种情况下,使用代替是正确的filter