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

时间:2013-07-06 22:22:31

标签: python sqlalchemy flask flask-sqlalchemy hstore

我正在使用烧瓶w / flask-sqlachemy扩展。

尝试搜索具有特定值的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)

这是我正在运行的查询:

results = BookDB.query.filter_by(attributes={ 'disabled' : '0' }).all()

这没有错误但没有结果。

如果我这样做:

results = BookDB.query.filter_by(attributes['disabled']='0').all()

我收到错误:'SyntaxError:keyword不能是表达式'

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

results = BookDB.query.filter(BookDB.attributes['disabled']=='0').all()

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

但是使用filter_by()的语法是什么?

1 个答案:

答案 0 :(得分:3)

在比较简单字段相等时,

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