Python sqlite3:如何插入缺少键/值的数据?

时间:2017-01-05 18:05:23

标签: python sqlite

我想以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语法添加缺少名称/值对的条目吗?

2 个答案:

答案 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