gpt4 book ai didi

python - 从 Python 将 null 插入 Sqlite

转载 作者:行者123 更新时间:2023-11-30 23:04:33 26 4
gpt4 key购买 nike

我有一个名为“test”的表,我正在通过 Python 代码创建它。

db = sqlite3.connect("mydb.db")
cur = db.cursor()
cur.execute('''CREATE TABLE IF NOT EXISTS test
(
"id" text primary key,
"field1" integer,
"fiedl2" integer,
"field3" text
)'''
)

我有一个文件,其中每一行都是一个 json。我逐行读取文件并将每行 json 中的数据插入表中。

文件.txt:

{'id':'abcde', 'field1': 10, 'field2': 20, 'field3': "hello"}
{'id':'asdf', 'field1': 20, 'field2': 5, 'field3': "world"}
{'id':'qwerty', 'field1': 1, 'field2': 2, 'field3': None}

如果 json 中的字段没有值,我想将 null 插入到我的 sqlite 表中。因此,如上面的最后一行所示,如果 field3 没有值,我将 None 放入其中,因为这是我在其他相关问题中读到的内容。

但是,当我插入如下时:

for line in readfile:
line = ast.literal_eval(line)
columns = '", "'.join([i.strip() for i in line.keys()])
columns = "\"" + columns + '\"'
placeholders = ', '.join('?' * len(line))
sql = 'INSERT INTO test ({}) VALUES ({})'.format(columns, placeholders)
cur.execute(sql, ["'" + str(i) + "'" for i in line.values()])
db.commit()

当我从 Sqlite 控制台执行 select 语句时,我得到“None”而不是 null。

sqlite> select * from test where id='qwerty' limit 1;
'qwerty'|1|2|'None'|

谁能帮我解决这个问题吗?我正在使用 Python 3.4

最佳答案

您将得到一个 "None" 字符串,因为您在将 None 传递给 execute 之前将其转换为字符串功能:

cur.execute(sql, ["'" + str(i) + "'" for i in line.values()])

因此,就 python/sqlite 而言,您插入的是字符串 "None" - 而不是 None 对象。

将参数作为 execute 函数中的第二个参数的要点是,它应该为您执行值到 sql 字符串的表示。因此,您应该以原生 python 数据类型提供值。

所以,使用

cur.execute(sql, list(line.values()))

实际上应该给你一个null而不是“None”

关于python - 从 Python 将 null 插入 Sqlite,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33658216/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com