Python 使用多个参数读取SQL,包括列表

Python 使用多个参数读取SQL,包括列表,python,pandas,Python,Pandas,我在stackoverflow上发现了许多类似的问题,但没有一个解决方案适合我。我试着用不同的方式去做,但是,很明显,“魔鬼在细节中”,我没有考虑到一些事情 鉴于: 以开始和结束日期[yyyyymmdd,yyyyymmdd]格式列出的值(x,x1,x3…xn)和日期-这些是我的SQL查询中的参数,我想用python读取它们 首先,我为列表定义占位符,以便在查询中使用: placeholders = ', '.join('?' * len(my_list)) 然后,我定义查询并读取它以将结果保存

我在stackoverflow上发现了许多类似的问题,但没有一个解决方案适合我。我试着用不同的方式去做,但是,很明显,“魔鬼在细节中”,我没有考虑到一些事情

鉴于: 以开始和结束日期[yyyyymmdd,yyyyymmdd]格式列出的值(x,x1,x3…xn)和日期-这些是我的SQL查询中的参数,我想用python读取它们

首先,我为列表定义占位符,以便在查询中使用:

placeholders = ', '.join('?' * len(my_list))
然后,我定义查询并读取它以将结果保存在dataframe中:

import pandas as pd
import pyodbc

query="""SELECT * FROM "my_table"
     WHERE 
     ID in ({})
     and date between ? and ?                          
     """.format(placeholders)

df = pd.read_sql_query(query, conn, params=(*my_list, date))
这将返回错误,说明(my_列表包含360个成员):

“SQL包含362个参数标记,但提供了361个参数”,“HY000”)

似乎查询并没有像我所希望的那样读取参数。但我不知道这有什么问题。 有人能帮忙吗

  • 我已经用另一种方式试过了。如果我将参数“date”放在第一位,错误是:SQL包含362个参数标记,但提供了2个参数(“HY000”)

如何在查询中显示参数才能正确读取?

为什么不打印SQL查询并直接运行它呢?看起来您的查询有两个日期参数,介于两者之间,在我的列表中有360个参数。您需要传递开始日期和结束日期。@anon01,您的意思是:df=pd.read_sql_query(““从my_表”中选择*,其中ID在({})中,日期在?和?之间?”。@format(占位符),conn,params=(*my_列表,日期))@Col Bates-collynomial,是右侧-查询有362个参数:360-in列表和2-date,起始日期和结束日期如下:[yyyyymmdd,yyyyymmdd]。我没有在这里的代码中显示它,但我定义了它