Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/66.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 无法使用session.execute for MySQL进行查询_Python_Mysql_Session_Flask Sqlalchemy - Fatal编程技术网

Python 无法使用session.execute for MySQL进行查询

Python 无法使用session.execute for MySQL进行查询,python,mysql,session,flask-sqlalchemy,Python,Mysql,Session,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/l

我在用炼金术。然而,当在命令行中调试时,我发现
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'
另外,如果我使用游标execute导入mysqldb,它也可以正常工作

curs.execute("SELECT * FROM KJ WHERE Stock LIKE %s",(Stock,))
我怀疑的问题是%s与
会话的库存不匹配。请执行
。我浏览了sqlalchemy文档,但不理解

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

从文档中:

使用SELECT for
execute
的格式如下:

execute(子句,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()
的有效参数。这样,您就可以执行任何本机无法作为SQLalchemy函数使用的任意SQL。也就是说,子句参数接受可执行语句(SQLalchemy函数或其他可执行函数,任意字符串必须与
text()
一起传递,参数作为字典提供。

来自文档:

使用SELECT for
execute
的格式如下:

execute(子句,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()
的有效参数。这样,您可以执行任何本机无法作为SQLalchemy函数使用的任意SQL。即,子句参数接受可执行语句(SQLalchemy函数或其他可执行函数,任意字符串必须与
text()
一起传递,参数以字典形式给出。

您是否尝试在选择中去掉多余的逗号?
WHERE Stock LIKE%s',(Stock,)
->
WHERE Stock LIKE%s',(Stock))
是,不处理相同的错误您是否尝试过在选择中去掉多余的逗号?
如%s”的股票,(股票,)
->
如%s”的股票,(股票))
是,不处理相同的错误,谢谢。如果
Stock=['SHELL',EXXON']
placeholder=','.join([':param']*len(Stock))
,我如何在
db.session.execute
?实际上
db.session.execute(“SELECT*FROM KLSE WHERE Stock-LIKE:param”),{“param”:Stock}
工作,那么我的答案解决了你的问题?还是还有什么不清楚的地方?一只股票就可以解决问题。若股票是一个不止一个的列表,我需要放置占位符
db.session.execute(“SELECT*FROM KLSE WHERE Stockbalance IN:placeholders”),{placeholders:Stock})
返回无效的syntaxWell yes,因为您使用的是类似于
。如果要搜索多个对象,则需要在:param
中使用
,或者使用
LIKE:param或LIKE:param2
。也就是说,我相信我的回答涵盖了你原来的问题。W,谢谢。如果
Stock=['SHELL',EXXON']
placeholder=','.join([':param']*len(Stock))
,我如何在
db.session.execute
?实际上
db.session.execute(“SELECT*FROM KLSE WHERE Stock-LIKE:param”),{“param”:Stock}
工作,那么我的答案解决了你的问题?还是还有什么不清楚的地方?一只股票就可以解决问题。若股票是一个不止一个的列表,我需要放置占位符
db.session.execute(“SELECT*FROM KLSE WHERE Stockbalance IN:placeholders”),{placeholders:Stock})
返回无效的syntaxWell yes,因为您使用的是类似于
。如果要搜索多个对象,则需要在:param
中使用
,或者使用
LIKE:param或LIKE:param2
。尽管如此,我相信我的回答确实涵盖了你最初的问题。