如果值是“ itertools.chain”对象,则sqlite3 INSERT INTO失败

时间:2019-03-03 07:23:55

标签: python sqlite itertools

我是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,默认情况下,TEXT不输入任何内容,并且我在其他文件上执行了这些代码即可工作。

期待您的帮助。预先谢谢你。

0 个答案:

没有答案