【问题标题】:Using executemany in SQLite3 for an UPDATE statement在 SQLite3 中使用 executemany 执行 UPDATE 语句
【发布时间】:2020-01-31 09:06:49
【问题描述】:

我正在尝试使用 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()

代码运行良好,但是当我查询数据库以查看是否已正确输入信息时,Height 和 Width 列仍然为空。

我想我知道问题所在,但还没有设法解决它。使用 ?传递第三个参数意味着 WHERE 语句中的字符串周围没有任何引号。但是,如果我在问号周围加上引号,我会收到以下错误 - “提供的绑定数量不正确。当前语句使用 2,提供了 3 个。”建议引号呈现 ?不是不可识别的参数。

【问题讨论】:

    标签: python sql sqlite


    【解决方案1】:

    不需要引用字符串字段,实际上它可能会导致您发现的问题。不过……

    来自python sqlite API doc

    提交()

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

    【讨论】:

    • 非常感谢。松了一口气,如果感觉有点昏昏欲睡,这是一个如此简单的修复。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-05-25
    • 2010-11-20
    • 2023-03-30
    相关资源
    最近更新 更多