首页 > 解决方案 > 将变量绑定到 Pandas.read_sql 的 SQLAlchemy 查询

问题描述

是否可以将变量绑定到 Pandas.read_sql 语句中使用的 SQLAlchemy 查询?

在 WHERE 子句中使用 %s 不起作用,并且 cx_Oracle 的文档指出:

cursor.execute('SELECT * FROM employees WHERE department_id=:dept_id)

在 Pandas 中不推荐直接使用 cx_Oracle 驱动程序,并且不是一个可行的选择。

我有一个组列表,我需要遍历 WHERE 语句,因为 SELECT * 内存太大,无法在单台 PC 上处理。

例子:

SELECT * FROM DUAL WHERE GROUP_NAME = %s

返回此错误:

(cx_Oracle.DatabaseError) ORA-00911: 无效字符... WHERE GROUP_NAME = %s

标签: pythonpandasoracle11gsqlalchemycx-oracle

解决方案


正如你在这里看到的,cx_Oracle.paramstyle不是。根据PEP 249,您必须使用以下语法:namedformat:namenamed paramstyle

import pandas as pd
sql = '''
 SELECT *
 FROM DUAL
 WHERE GROUP_NAME = :name
'''
df = pd.read_sql(sql, params={'name': the_name_you_want})


推荐阅读