Как выполнить проверку, что запись в БД уже существует?
Как выполнить проверку на существование записи, которую пытаюсь добавить в БД?
Пишу как в документации, проводил небольшой дебаг, но всё равно, при попытке добавить уже существующую запись в БД, она успешно добавляется.
Вот сам код:
import sqlite3
db = sqlite3.connect('test.db')
sql = db.cursor()
sql.execute("""create table if not exists players(
nick text,
score integer
)""")
db.commit()
nick = input()
score = int(input())
sql.execute("select nick from players where nick = '{nick}'")
select = sql.fetchone()
if select is None:
sql.execute(f'insert into players(nick, score) values (?, ?)', (nick, score))
db.commit()
print('Successfully done!')
else:
print('Sorry...')
for value in sql.execute('select * from players'):
print(value)
Ответы (1 шт):
Автор решения: MaxU
→ Ссылка
Правильнее будет создать первичный ключ (primary key) в таблице, чтобы SQLite сам проверял записи на уникальность и обернуть вставку записей в try - except блок:
import sqlite3
def add_player(nick, score):
try:
cur.execute(f'insert into players(nick, score) values (?, ?)', (nick, score))
except sqlite3.IntegrityError:
pass
db = sqlite3.connect('test.db')
cur = db.cursor()
cur.execute("""create table if not exists players(
nick text,
score integer,
constraint pk_players primary key (nick)
)""")
nick, score = "max", 123
add_player(nick, score)
add_player(nick, score)
add_player(nick, score)
Проверка:
In [375]: cur.execute("select * from players")
Out[375]: <sqlite3.Cursor at 0x7ff584317030>
In [376]: print(list(cur.fetchall()))
[('max', 123)]