Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.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 如何将SQLAlchemy查询传递给execute(query_str,params)函数_Python_Sqlalchemy - Fatal编程技术网

Python 如何将SQLAlchemy查询传递给execute(query_str,params)函数

Python 如何将SQLAlchemy查询传递给execute(query_str,params)函数,python,sqlalchemy,Python,Sqlalchemy,许多第三方库通过模仿.execute(operation[,parameters])函数的函数支持数据库连接 例如pandas.read_sql(查询、引擎、参数)函数 问题在于,参数规格因发动机而异。例如,SQLite在查询中使用?,MySQL在查询中使用%s等。参数需要是列表或dict,具体取决于引擎 使用SQLAlchemy处理不同的引擎,我们如何获得适当的查询和参数以传递给execute (请注意,这是一个不同的问题-我希望将查询和参数分开)发布问题后,我发现了以下解决方法: impor

许多第三方库通过模仿
.execute(operation[,parameters])
函数的函数支持数据库连接

例如
pandas.read_sql(查询、引擎、参数)
函数

问题在于,参数规格因发动机而异。例如,SQLite在查询中使用
,MySQL在查询中使用
%s
等。参数需要是列表或dict,具体取决于引擎

使用SQLAlchemy处理不同的引擎,我们如何获得适当的查询和参数以传递给
execute


(请注意,这是一个不同的问题-我希望将查询和参数分开)

发布问题后,我发现了以下解决方法:

import sqlalchemy
from sqlalchemy.sql import select
import pandas as pd

engine = sqlalchemy.create_engine("mysql+cymysql://root:tiger@localhost/test")

... snip ...

query = select(...)  # create a valid query.
df = pd.read_sql(query, engine)
因此,巨蟒的魔力拯救了这一天。虽然这是首选方法,但它并不能准确地回答获取适当的查询字符串和参数参数的问题(如果我们需要将它们用于其他库的话)

要获取查询字符串,请执行以下操作。我不知道如何获得适用于所有不同
paramstyle

query_str = str(query.compile(engine))     # Gives the query string

您已经完成了一半,检查文档您将看到compile返回的内容:

除了字符串表示之外,此对象还提供对绑定参数的访问:

compiled = query.compile(engine)
query_str = str(compiled)
query_params = compiled.params

compiled.params包含与引擎不对应的参数的
dict
。在上面的示例中,您不能调用
引擎.execute(query\u str,query\u params)
。所需的参数格式取决于引擎
paramstyle
属性[PEP-249]。有没有办法获得正确格式的参数?