首页 > 解决方案 > 如果值是“itertools.chain”对象,sqlite3 INSERT INTO 失败

问题描述

我是 sqlite3 的新手(python 用户)

已经根据以下方法将数据存储在数据库中,但这次不工作。INSERT INTO 执行,没有错误报告,但没有存储在 db 中。

我在这个网站上搜索了很多这个主题,专注于“不提交”。但我很确定我完成了“提交”并正确关闭了文件。在 INSERT 操作之后,我可以在我的数据库中找到带有标题(列名)的表 f65,但没有更多数据。(10 列 x 4k 行)。

关键代码片段如下。

df = pd.DataFrame(pd.read_excel(r'/Users/' + username + r'/Documents/working/addf6-5.xlsx', header=0))
df = df.replace('#NUM!', '')

value = chain(reversed(grouplist2), df.values.tolist())
for x in value:
    x[4] = str(x[4])
    x[7] = str(x[7])

conn = sqlite3.connect('veradb.db')
c = conn.cursor()
c.execute("DROP TABLE IF EXISTS f65")
conn.commit()
c.close()
conn.close()

conn = sqlite3.connect('veradb.db')
c = conn.cursor()
c.execute("CREATE TABLE IF NOT EXISTS f65 ('offer', 'code', 'desc', 'engine', 'cost', 'supplier', 'remark', 'podate', 'empty', 'border')")
c.executemany("INSERT INTO f65 VALUES (?,?,?,?,?,?,?,?,?,?)", value)
conn.commit()
c.close()
conn.close()

解释的更多细节:缓存数据在addf6-5中,我在grouplist2(它是一个列表)中获取了新数据并用于chain(reversed(grouplist2), df.values.tolist())组合数据。

为什么使用

for x in value:
    x[4] = str(x[4])
    x[7] = str(x[7])

因为我的 pycharm 报告“错误绑定参数 4 - 可能不支持的类型。”&“错误绑定参数 7 - 可能不支持的类型。” 因此,我再次执行 STR,尽管默认情况下它们应该是根据 SQLite 的 TEXT 。

我试图通过测试“价值”

for x in value:
    x[4] = str(x[4])
    x[7] = str(x[7])
    print(x)

并发现它们可以正确打印。也许这个证明值(列表)是正确的?

有些人可能会怀疑“CREATE TABLE”语句中是否缺少属性,我可以说 Sqlite 默认为它们提供 TEXT 是不输入的,我在其他文件上执行这些代码并工作。

期待您的帮助。先感谢您。

标签: pythonsqliteitertools

解决方案


推荐阅读