对于 pandas 来说,有没有办法将Read_SQL()与接受多个变量的SQL语句一起使用?

2022-04-24 00:00:00 python pandas pyodbc sql pypyodbc

问题描述

这是我代码的一部分。我已经有了一个包含值的数据库,需要根据该数据框中的值创建一个新的数据框(目前这些值只有12&;13,存储在header_row_ids变量中)。

当我运行该脚本时,收到以下错误消息:

pandas.io.sql.DatabaseError:对SQL‘SELECT*FROM dbo.TestDetails WHERE ID IN(?,?),(13,12)’:(‘07002’,‘[07002][Microsoft][ODBC SQL Server驱动程序]计数字段不正确或语法错误’)执行失败

有人能帮我解决这个问题吗?我将非常感激。

import pypyodbc
import pandas

sourceConnection = pypyodbc.connect(
            self.sourceDriver +
            self.sourceServer +
            self.sourceDatabase
            )

placeholders = ",".join("?" * (len(self.header_row_ids)))
sql_source_detail_select = "SELECT * FROM dbo.TestDetails WHERE Id IN (%s)" % placeholders

header_row_ids = [12, 13]
header_row_ids_string = str(self.header_row_ids).strip('[]')

new_sql_source_detail_select = sql_source_detail_select + ", (" + header_row_ids_string + ")"

dataframe = pandas.read_sql(new_sql_source_detail_select, sourceConnection)

解决方案

read_sql接受可用于传递参数值的params参数:

# header_row_ids = [12, 13]
# sql = "SELECT * FROM dbo.TestDetails WHERE Id IN (?,?)"

dataframe = pandas.read_sql(sql, sourceConnection, params=header_row_ids)

相关文章