在SQLite3中对UPDATE语句使用executemany

时间:2020-01-31 09:06:49

标签: python sql sqlite

我正在尝试使用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。”建议用引号引起?不能识别为参数。

1 个答案:

答案 0 :(得分:0)

没有必要用引号引起来,实际上,这可能会引起问题。但是...

来自python sqlite API doc

commit()

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

相关问题