许多第三方库都支持数据库连接,其功能模仿 PEP-249 .execute(操作[,参数])
函数。
一个例子是pandas.read_sql(query, engine, params)
函数。
问题是参数规范因引擎而异。例如,SQLite 在查询中使用 ?
,MySQL 使用 %s
等。参数必须是列表或字典,具体取决于引擎。
使用 SQLAlchemy 处理不同的引擎,我们如何获取适当的查询和 params 参数来传递给 execute
。
(请注意,这是与 this question 不同的问题 - 我想将查询和参数分开)
最佳答案
发布问题后,我找到了以下解决方法:
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)
所以Python的魔力拯救了世界。虽然这将是首选方法,但它并不能完全回答获取适当的查询字符串和参数参数的问题(如果我们需要它们用于不同的库)。
要获取查询字符串,请执行以下操作。我不知道如何以适用于所有不同 paramstyle
query_str = str(query.compile(engine)) # Gives the query string
关于python - 如何将 SQLAlchemy 查询传递给execute(query_str, params) 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30207478/