【发布时间】:2017-05-28 20:45:05
【问题描述】:
我正在使用烧瓶 sqlalchemy。但是在命令行调试的时候发现session.execute返回错误。
Stock ='SHELL'
>>> db.session.execute("SELECT * FROM KJ WHERE Stock LIKE %s",(Stock,))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/scoping.py", line 149, in do
return getattr(self.registry(), name)(*args, **kwargs)
File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/orm/session.py", line 978, in execute
clause, params or {})
File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/engine/base.py", line 720, in execute
return meth(self, multiparams, params)
File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/sql/elements.py", line 317, in _execute_on_connection
return connection._execute_clauseelement(self, multiparams, params)
File "/usr/local/lib/python3.4/dist-packages/sqlalchemy/engine/base.py", line 793, in _execute_clauseelement
keys = distilled_params[0].keys()
AttributeError: 'tuple' object has no attribute 'keys'
如果我使用 db.engine.execute,它可以正常工作,没有错误
db.engine.execute("SELECT * FROM KLSE WHERE Stock LIKE %s",(Stock,))
另外,如果我导入 mysqldb,使用游标执行,它也可以正常工作。
curs.execute("SELECT * FROM KJ WHERE Stock LIKE %s",(Stock,))
我怀疑的问题是 %s 与 session.execute 的 Stock 不匹配。看了sqlalchemy文档,没看懂。
执行(子句,params=None,mapper=None,bind=None,**kw)¶ http://docs.sqlalchemy.org/en/latest/orm/session_api.html
【问题讨论】:
-
你试过去掉你选择的多余的逗号吗?
WHERE Stock LIKE %s",(Stock,))->WHERE Stock LIKE %s",(Stock)) -
是的,没有出现同样的错误
标签: python mysql session flask-sqlalchemy