Python SQLite数据库没有增长

时间:2019-05-26 22:35:04

标签: python python-3.x sqlite

我正在尝试使用Python库sqlite3来填充SQLite数据库。在此示例中,想法只是从文件中读取数据并填充数据库,但是,尽管似乎正在创建表,但数据库并没有增长,也没有向其中写入值。

我的代码如下:

import sqlite3


def update_db(c, key, val):
    sql = ''' UPDATE atable SET f1 = ? WHERE id = ?; '''
    c.execute(sql, (val, key))


def create_table(c):
    sql = ''' CREATE TABLE atable (id text PRIMARY KEY, f1 integer DEFAULT 0); '''
    c.execute(sql)


with sqlite3.connect('test.db') as conn:
    c = conn.cursor()
    create_table(c)

    with open('file1.txt') as f1:
        for line in f1:
            l = line.strip().split()
            update_db(c, l[0], int(l[1]))

    conn.commit()

此代码运行无误,但是在尝试使用Python查询此数据库时:

with sqlite3.connect('test.db') as conn:
    c = conn.cursor()
    c.execute('SELECT * FROM atable;')
    for row in c:
        print(row)

或在SQLite命令界面中:

$ sqlite3 test.db
SQLite version 3.8.10.2 2015-05-20 18:17:19
Enter ".help" for usage hints.
sqlite> SELECT * FROM atable;
sqlite> .tables
atable
sqlite>

输出始终为空(但看起来表已正确创建)。我在这里做什么错了?

用于测试的“ file1.txt”是这样的:

foo 2
bar 0
baz 1

1 个答案:

答案 0 :(得分:1)

向表中添加行的SQL语法为:

INSERT INTO atable (id, f1) VALUES (?, ?);

UPDATE将不执行任何操作,如果表中没有行。

如果要插入或替换现有行,则sqlite还支持INSERT OR REPLACE命令。