温馨提示:本文翻译自stackoverflow.com,查看原文请点击:python - Using executemany in SQLite3 for an UPDATE statement
python sql sqlite

python - 在SQLite3中将executemany用于UPDATE语句

发布于 2020-03-27 16:12:10

我正在尝试使用execute many更新sqlite3数据库中的两列。我正在使用pandas数据框来存储有关某些tiff图像文件的信息-它们的高度,宽度(均为整数),并使用其文件名(字符串)作为WHERE子句。

import ImageQA
import os
import sqlite3
home_directory = os.getcwd()
image_file_set = ImageQA.get_image_size(shelfmark_reference,working_directory)
#image_count = len(image_file_set))
tiff_file_list = list(image_file_set['TiffFile'])
height_list = list(image_file_set['Height'])
width_list = list(image_file_set['Width'])
zipped = zip(height_list,width_list,tiff_file_list)
file_list = list(zipped)
os.chdir(home_directory)
conn = sqlite3.connect('DigiFolio')
cursor = conn.cursor()
cursor.executemany('UPDATE Capture_information SET Height = ?,Width = ? WHERE TiffFileName =?',file_list)
conn.close()

该代码运行良好,但是当我查询数据库以查看是否正确输入了信息时,“高度”和“宽度”列仍为空。

我认为我知道问题所在,但尚未解决。使用?传递第三个参数意味着WHERE语句中的字符串周围没有引号。但是,如果在问号两边加上引号,则会出现以下错误:“提供的绑定数不正确。当前语句使用2,并且提供了3。” 建议用引号引起来?不能识别为参数。

查看更多

查看更多

提问者
Sotirios
被浏览
460
DinoCoderSaurus 2020-01-31 20:15

不必引用字符串字段,实际上,这可能会导致问题,如您所发现的。然而...

python sqlite API doc

承诺()

此方法提交当前事务。如果不调用此方法,则从其他数据库连接中看不到自上次调用commit()以来所做的任何操作。如果您想知道为什么看不到已写入数据库的数据,请检查您是否没有忘记调用此方法。