6

I am using flask w/ flask-sqlachemy extension.

Am attempting to search for all records that have an hstore key with a certain value.

Here is what the column is set up as:

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)

and here is the query I'm running:

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

This goes through without error but finds no results.

If I do:

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

I get the error: 'SyntaxError: keyword can't be an expression'

If I use filter() instead of filter_by(), I can do

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

and this works fine and produces correct results.

But what is the syntax for it to work with filter_by()?

4

1 回答 1

4

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

于 2013-07-06T22:50:55.180 回答