许多第三方库支持使用模仿PEP-249 .execute ( operation [, parameters ])
函数的函数的数据库连接。
一个例子是pandas.read_sql(query, engine, params)
函数。
问题在于参数规格因发动机而异。例如,SQLite使用?
,MySQL在查询中使用%s
等。 params需要是列表或dict,具体取决于引擎。
使用SQLAlchemy处理不同的引擎,我们如何获得适当的查询和参数传递给execute
。
(注意这是this question的另一个问题 - 我想保持查询和参数分开)
答案 0 :(得分:2)
发布问题后,我发现了以下解决方法:
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
答案 1 :(得分:-1)
你已经到了一半,检查文档,你会看到编译返回的内容:
http://docs.sqlalchemy.org/en/rel_1_0/core/internals.html#sqlalchemy.engine.interfaces.Compiled
除了字符串表示外,此对象还提供对绑定参数的访问:
compiled = query.compile(engine)
query_str = str(compiled)
query_params = compiled.params