sqlite3更新/将数据添加到新列

时间:2018-12-08 06:43:57

标签: python-3.x sqlite

我在表中使用名为 NULL的 NULL 值创建了新列。现在,我想从列表中添加数据。它包含约13万个元素。

我尝试插入,返回错误:

conn = create_connection(xml_db)
cursor = conn.cursor()
with conn:
    cursor.execute("ALTER TABLE xml_table ADD COLUMN id integer")
    for data in ssetId:
        cursor.execute("INSERT INTO xml_table(id) VALUES (?)", (data,))
        conn.commit()

我也尝试过更新:

conn = create_connection(xml_db)
cursor = conn.cursor()
with conn:
    cursor.execute("ALTER TABLE xml_table ADD COLUMN id INTEGER")
    for data in ssetId:
        cursor.execute("UPDATE xml_table SET ('id' = ?)", (data,))
        conn.commit()

这里不正确是什么?

编辑进行说明。

该表已存在,并已填充数据。我想向其中添加具有自定义值的列“ id”。

1 个答案:

答案 0 :(得分:0)

这里有一个类似于您的示例,可能会有用。

import sqlite3

conn = sqlite3.connect("xml.db")

cursor = conn.cursor()

with conn:

    # for testing purposes, remove this or else the table gets dropped whenever the file is loaded
    cursor.execute("drop table if exists xml_table")

    # create table with some other field
    cursor.execute("create table if not exists xml_table (other_field integer not null)")

    for other_data in range(5):
        cursor.execute("INSERT INTO xml_table (other_field) VALUES (?)", (other_data,))

    # add id field
    cursor.execute("ALTER TABLE xml_table ADD COLUMN id integer")

    # make sure the table exists
    res = cursor.execute("SELECT name FROM sqlite_master WHERE type='table'")
    print("Table Name: {}".format(res.fetchone()[0]))

    # add data to the table
    for data in range(5):
        cursor.execute("UPDATE xml_table SET id = ? WHERE other_field = ?", (data, data))

    # if you must insert an id, you must specify a other_field value as well, since other_field must be not null
    cursor.execute("insert into xml_table (id, other_field) VALUES (? ,?)", (100, 105))


    # make sure data exists
    res = cursor.execute("SELECT id, other_field FROM xml_table")
    for id_result in res:
        print(id_result)

    conn.commit()

conn.close()

正如我在下面的评论中所述,由于您的一行中有一个NOT NULL约束,因此表中没有包含该列NULL的行。在上面的示例中,other_field被指定为NOT NULL,因此在列NULL中将没有行具有other_field值的行。对此的任何偏离都将是IntegrityError

输出:

Table Name: xml_table
(0, 0)
(1, 1)
(2, 2)
(3, 3)
(4, 4)
(100, 105)