我想以json格式将新数据条目添加到使用sqlite3的数据库中。 示例数据库'test.db'有一个表'cars',它有3个值,'MAKE','MODEL'和'COST'。 新数据包含缺少名称/值对的条目:
select * from newbuildtable
为了解决KeyError的问题,我使用了setdefault()并添加了key / None对(如果每个条目中都缺少它们):
entries = {
"CARS":[
{
"MAKE": "VW",
"MODEL":"Passat",
"COST":23000
},
{
"MAKE":"Honda",
"MODEL":"Civic"
}
]
}
虽然这似乎有用,但是还有一种方法可以使用SQL语法添加缺少名称/值对的条目吗?
答案 0 :(得分:1)
使用参数绑定时,必须提供与字符串中的参数一样多的参数。这不是SQL语法的问题,它是参数绑定语法的问题。我没有看到任何方法。
您可以使用collections.defaultdict()
和命名参数绑定的组合来使代码更具可读性:
import sqlite3
from collections import defaultdict
keys = ["MAKE", "MODEL", "COST"]
with sqlite3.connect(":memory:") as conn:
c = conn.cursor()
c.execute("create table cars (make, model, cost)")
for car in entries['CARS']:
car = defaultdict(lambda: None, car)
c.execute('INSERT INTO cars VALUES(:MAKE,:MODEL,:COST)', car)
答案 1 :(得分:0)
如果您没有为其提供条目,则需要更改表中的列以具有默认值。
# Connecting to the database file
conn = sqlite3.connect(sqlite_file)
c = conn.cursor()
添加具有默认行值的新列
c.execute("ALTER TABLE {tn} ADD COLUMN '{cn}' {ct} DEFAULT '{df}'"\
.format(tn=table_name, cn=new_column2, ct=column_type, df=default_val))
有三种方法可以将数据插入SQL表中:
使用“VALUES”关键字:在现有表格中创建一个或多个新行。
使用“SELECT”语句而不是VALUES子句。对于通过执行SELECT语句返回的每行数据,将新条目插入表中。
使用默认值。 INSERT ... DEFAULT VALUES语句将一个新行插入到命名表中。新行的每一列都使用其默认值填充,如果在CREATE TABLE语句中未指定默认值作为列定义的一部分,则填充NULL。
要了解如何插入表格并查看更多示例,请参阅source