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]。有没有办法获得正确格式的参数?