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

时间:2015-05-13 06:44:23

标签: python sqlalchemy

许多第三方库支持使用模仿PEP-249 .execute ( operation [, parameters ])函数的函数的数据库连接。

一个例子是pandas.read_sql(query, engine, params)函数。

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

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

(注意这是this question的另一个问题 - 我想保持查询和参数分开)

2 个答案:

答案 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