Повторный запрос на вставку для одной проблемы - PullRequest
1 голос
/ 18 мая 2019

Я хочу добавить новую информацию о проблеме в свою базу данных. Я новичок в sqlite3, так что извините за любые ошибки. Я использую sqlite3 и python3. Я пытаюсь вставить новую строку, соответствующую каждой проблеме, определенной по конкурсам_id и problem_id (каждая параtest_id и problem_id относится к уникальной проблеме). Но, если соответствующая строка уже существует, я сохраню ее как есть. Вот схема таблицы:

CREATE TABLE problems (
    contest_id INT NOT NULL,
    contest_name TEXT,
    problem_id CHAR(10) NOT NULL,
    problem_name TEXT,
    CONSTRAINT Problem_info PRIMARY KEY(contest_id, problem_id) )

Скрипт Python:

import sqlite3
import sys

conn = sqlite3.connect('sqlite.db')
cur = conn.cursor()

contest_id = (sys.argv)[1]
problem_list_1 = (sys.argv)[2:]
problem_list_2 = list(cur.execute('SELECT problem_id FROM problems WHERE contest_id = '+str(contest_id)).fetchall())
conn.commit()

problem_list = list(set(problem_list_1) - set(problem_list_2))
problem_list.sort()

for problem in problem_list:
    cur.execute('INSERT INTO problems (contest_id, contest_name, problem_id, problem_name) VALUES('+str(contest_id)+', "dummy_name"'+', "'+problem+'", "dummy_name")')
    conn.commit()

print(conn.execute('SELECT * FROM problems').fetchall())
conn.commit()
conn.close()

Вот аргументы и выходные пары в последовательности, которую я ввел:

1159 A B C
[(1159, 'dummy_name', 'A', 'dummy_name'), (1159, 'dummy_name', 'B', 'dummy_name'), (1159, 'dummy_name', 'C', 'dummy_name')]
1167 A
[(1159, 'dummy_name', 'A', 'dummy_name'), (1159, 'dummy_name', 'B', 'dummy_name'), (1159, 'dummy_name', 'C', 'dummy_name'), (1167, 'dummy_name', 'A', 'dummy_name')]
1159 D
[(1159, 'dummy_name', 'A', 'dummy_name'), (1159, 'dummy_name', 'B', 'dummy_name'), (1159, 'dummy_name', 'C', 'dummy_name'), (1167, 'dummy_name', 'A', 'dummy_name'), (1159, 'dummy_name', 'D', 'dummy_name')]
1159 A B E
Traceback (most recent call last):
  File "update_contest.py", line 15, in <module>
    cur.execute('INSERT INTO problems (contest_id, contest_name, problem_id, problem_name) VALUES('+str(contest_id)+', "dummy_name"'+', "'+problem+'", "dummy_name")')
sqlite3.IntegrityError: UNIQUE constraint failed: problems.contest_id, problems.problem_id

При повторении проблемы похоже, что problem_list_2 остается пустым, из-за чего возникает эта ошибка.

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