【发布时间】:2018-11-05 20:02:46
【问题描述】:
我有一个如下定义的函数来查询数据库表
def query_from_DB(obj, **filter):
DBSession = sessionmaker(bind=engine)
session = DBSession()
res = session.query(obj).filter_by(**filter)
session.close()
return [x for x in res]
我使用如下请求查询表
query_from_DB(Router, sp_id="sp-10.1.10.149", connectivity="NO")
上面的结果正确返回了数据库的响应,但是当我使用查询时
query_from_DB(Router, sp_id!="sp-10.1.10.149", connectivity="NO")
我遇到了一个错误
SyntaxError: non-keyword arg after keyword arg
为了获得结果,我可以进行哪些可能的更改?
【问题讨论】:
-
每次查询时创建一个
sessionmaker实例是一种反模式。您可以将DBSession = sessionmaker(bind=engine)行移到query_from_DB之外。见When Do I Make a sessionmaker。如果您没有预先加载任何关系,那么在使用查询返回的对象之前关闭会话也会产生问题。
标签: sqlalchemy sqlanywhere sqlalchemy-utils