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

标签 python sqlalchemy

许多第三方库都支持数据库连接,其功能模仿 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/

相关文章:

python - 如何在networkx中画出更漂亮的树

python - 将关系转换为查询对象

python-3.x - Airflow 插件 - 创建自己的模型并使用 airflow 元数据库来存储插件特定数据

python - SqlAlchemy:如何在用户之间创建连接,即 make "friends"

postgresql - SqlAlchemy:暂时禁用大插入事务的数据库约束

python - 语法错误 - 解析时出现意外的 EOF

python - 通过 for 循环调用函数,并将函数作为字符串列表

带条件的 Python for 循环

python - 什么是 Python 中的 InstrumentedList?

python - 使用 Django ORM 简化原始 SQL 执行的工具