【问题标题】:[sqlalchemy]SyntaxError: non-keyword arg after keyword arg[sqlalchemy]SyntaxError: 关键字 arg 之后的非关键字 arg
【发布时间】:2013-08-22 18:23:28
【问题描述】:
@classmethod
def get(cls, id=None, **kwarg):
    return con_sesison.query(cls).filter_by(or_(id=id, and_(**kwarg))).scalar()

我得到了错误:

SyntaxError: 关键字 arg 之后的非关键字 arg

【问题讨论】:

  • 没有问题。

标签: python sqlalchemy


【解决方案1】:

通过使用id=id,您将传递一个id 参数,其值等于id 变量。相反,您需要以field == value 的格式将过滤条件传递给or_

只需将id=id 替换为id==id

【讨论】:

    【解决方案2】:

    filter_by 只是一个通过关键字参数进行相等比较的简写函数。相反,几乎总是使用允许表达式的filter 更清晰:

    exprs = [cls.k == v for k, v in kwarg.items]
    con_session.query(cls).filter(or_(cls.id==id, and_(*exprs))).scalar()
    

    filter_by 方法不是很灵活,但您应该能够达到相同的效果(未经测试)。

    【讨论】:

    • 谢谢。我想我找到了原因。or_(cls.id==id, and_(*exprs)) 'id' 是关键字参数,and_(*exprs) 是非关键字参数不能在关键字参数之后。
    • 是的,但如果你只添加一个= 符号,但留下filter_by,你会得到错误的结果。检查执行的查询。
    • 是的。那是另一个问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多