Python Pyodbc查询失败,并在.join['?',list]上使用替换参数列表

问题描述

嗨,我正在尝试从python运行选择查询到sql服务器。我只需要选择脚本中另一个函数的列表中的特定文件即可。我为此编写了此函数:

def flist_in_psumsdb(config,fnames_set_in_psumsdictlist):
constring = config['db_string']['db_string']
cnxn = pyodbc.connect(constring)
FilesToBeCrunched1000 = list(div_list_into_chunks(list(fnames_set_in_psumsdictlist),1000))
file_list = set()
for FilesChunks1000 in FilesToBeCrunched1000:
    values_string = ','.join(['?' for item in FilesChunks1000])
    sqlstring = f"""SELECT LOG FROM {config['db_string']['bd_psums_meta_table']} WHERE LOG IN ({values_string})"""
    # print((FilesChunks1000))
    df = pd.read_sql_query(sqlstring,cnxn)
    file_list.update(set(df.LOG))

但是,当我运行脚本时,出现以下错误:

 Execution failed on sql 'SELECT LOG FROM [NSGWSAINLINE].[dbo].[bd_psums_meta] WHERE LOG IN (?,?,?)

我打印了值字符串变量,它给了我:

?,?

现在这很奇怪,因为我认为这是您进行参数替换的联接方式。更奇怪的是,该结构适用于我编写的用于从同一表中删除重复项的另一个函数:

    for FilesChunks1000 in FilesToBeCrunched1000:
    values_string = ','.join(['?' for item in FilesChunks1000])
    sqlstring = f"""DELETE FROM {config['db_string']['bd_psums_meta_table']} WHERE [LOG] IN ({values_string})"""

尽管我在此函数中打印values_string时,该查询显然也有效,但它也会返回相同的结果

?,?

那有什么呢?

解决方法

您使用的是“?”参数,但不在任何地方提供其值

尝试

values_string = ','.join(["?" for item in FilesChunks1000])
sqlstring = f"""SELECT LOG FROM {config['db_string']['bd_psums_meta_table']} WHERE LOG IN ({values_string})"""
df = pd.read_sql_query(sqlstring,cnxn,params=FilesChunks1000)
file_list.update(set(df.LOG))

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...