过滤查询,然后使用 SQLAlchemy 按 id 获取一行

Abd*_*dul 3 python sqlalchemy

我只想通过 id 获取用户,如果他们没有deleted=0. 我试过

user = User.query.filter_by(deleted=0).get(id)
Run Code Online (Sandbox Code Playgroud)

但出现错误。如何过滤查询并通过 id 获取?

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/home/david/.virtualenvs/flask-sqlalchemy/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 831, in get
    return self._get_impl(ident, loading.load_on_ident)
  File "/home/david/.virtualenvs/flask-sqlalchemy/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 864, in _get_impl
    return fallback_fn(self, key)
  File "/home/david/.virtualenvs/flask-sqlalchemy/lib/python3.6/site-packages/sqlalchemy/orm/loading.py", line 177, in load_on_ident
    q._get_condition()
  File "/home/david/.virtualenvs/flask-sqlalchemy/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 350, in _get_condition
    "get", order_by=False, distinct=False)
  File "/home/david/.virtualenvs/flask-sqlalchemy/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 368, in _no_criterion_condition
    self._no_criterion_assertion(meth, order_by, distinct)
  File "/home/david/.virtualenvs/flask-sqlalchemy/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 365, in _no_criterion_assertion
    "Query with existing criterion. " % meth)
sqlalchemy.exc.InvalidRequestError: Query.get() being called on a Query with existing criterion.
Run Code Online (Sandbox Code Playgroud)

dav*_*ism 5

正如错误所说,get只有在您没有过滤查询时才有效。如果要过滤,也可以过滤id并使用first.

user = User.query.filter_by(id=id, deleted=0).first()
Run Code Online (Sandbox Code Playgroud)