gpt4 book ai didi

python - 无法使用 session.execute 查询 MySQL

转载 作者:行者123 更新时间:2023-11-30 22:06:17 25 4
gpt4 key购买 nike

我正在使用 flask 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的文档,没看懂。

execute(clause, params=None, mapper=None, bind=None, **kw)¶ http://docs.sqlalchemy.org/en/latest/orm/session_api.html

最佳答案

来自文档:

execute 使用 SELECT 的格式如下:

执行(子句,params=None,mapper=None,bind=None,**kw)

文档中有一个使用以下选择的示例解决方案:

result = session.execute(
"SELECT * FROM user WHERE id=:param",
{"param":5}
)

如果您的数据库连接以其他方式正确设置,请按照文档进行操作,以下操作应该有效:

Stock ='SHELL'
db.engine.execute(text("SELECT * FROM KLSE WHERE Stock LIKE :param"),{"param":Stock})

这个想法是将查询提供给 text() 函数,它是 execute() 的有效参数。这样你就可以执行任何不是 native 可用的 SQLalchemy 函数的任意 SQL。 IE。子句参数接受可执行语句(SQLalchemy 函数或其他可执行函数,必须使用 text() 传递任意字符串,并且参数以字典形式给出。

关于python - 无法使用 session.execute 查询 MySQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41635274/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com