База данных Python SQLite не растет - PullRequest
0 голосов
/ 27 мая 2019

Я пытаюсь заполнить базу данных SQLite, используя библиотеку Python sqlite3.В этом примере идея состоит в том, чтобы просто прочитать данные из файла и заполнить базу данных, однако, хотя создается впечатление, что таблица создается, база данных не растет и значения не записываются в нее.

приведенный ниже код:

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 Ответ

1 голос
/ 27 мая 2019

Синтаксис SQL для добавления строк в таблицу:

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

UPDATE ничего не сделает, если в таблице еще нет строк.

Если вы хотите вставить или заменить существующую строку, sqlite также поддерживает команду INSERT OR REPLACE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...