cursor.fetchone (), возвращающий None после попытки вставить? - PullRequest
0 голосов
/ 30 января 2020

У меня есть таблица в базе данных SQLite3, которая выглядит следующим образом:

CREATE TABLE "user" (
    "id"    INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT UNIQUE,
    "discriminator" TEXT NOT NULL,
    "userid"    INTEGER NOT NULL UNIQUE,
    "username"  TEXT NOT NULL,
    "matches_played"    INTEGER NOT NULL,
    "match_wins"    INTEGER NOT NULL,
    "match_losses"  INTEGER NOT NULL,
    "match_draws"   INTEGER NOT NULL,
    "rating"    REAL NOT NULL,
    "plays_game"    INTEGER,
    FOREIGN KEY("plays_game") REFERENCES "ygo_games"("game_id")
);

И после попытки вставки, подобной этой:

arg = tuple(user_data)
    statement = db_cursor.execute('INSERT INTO user VALUES(NULL, ?, ?, ?, ?, ?, ?, ?, ?, NULL)', arg)
    result = db_cursor.fetchone()

С кортежем arg, подобным этому:

arg = ('1234', 123123123123, 'Name', 0, 0, 0, 0, 1000)

В результате получается «Нет». Почему это могло произойти?

Редактировать: Просто понял, что операторы INSERT не возвращают никаких строк, но все же, что было бы лучшим способом проверить, было ли выполнение успешным с Python * * 1016

1 Ответ

0 голосов
/ 31 января 2020

По документам, чтобы проверить, был ли запрос успешным, используйте атрибут cursor.lastrowid:

Если оператору INSERT или REPLACE не удалось вставить предыдущий успешный идентификатор строки, возвращается.

Кроме того, рассмотрите рекомендованную практику явного указания столбцов добавления, чтобы избежать отображения переменных из предложений VALUES или SELECT. Это всегда позволяет вам опустить столбец автоинкремента (который, кстати, не нужен в SQLite ) и последний столбец, plays_game :

sql = '''INSERT INTO user ("discriminator", "userid", "username", "matches_played", 
                           "match_wins", "match_losses", "match_draws", "rating")
         VALUES(?, ?, ?, ?, ?, ?, ?, ?)'''

statement = db_cursor.execute(sql, arg)
id = db_cursor.lastrowid

db_conn.commit()                             # IMPORTANT TO PERSIST CHANGES
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...