Как сделать проверку существования записи в sqlite3?

Видел подобный вопрос, но не смог найти нужного ответа.

Задача:

При вызове функции def scoreupdater(chatid), нужно создавать в таблице строчку вида "'значение chatid' , 0 , 0 , 0"

А затем обновлять значения этой строчки.

Сейчас моя функция выглядит так:

def scoreupdater(chatid):
   con = sqlite3.connect('statsbase.db')
   cursorObj = con.cursor()
   cursorObj.execute("INSERT INTO stats (fromuserid, statpl ,statmn, k) VALUES(?,0,0,0)", [chatid])
   cursorObj.execute("UPDATE stats SET statpl = statpl + 1 where fromuserid = ?" , [chatid])
   con.commit()
   con.close()`

Проще говоря, нужно добавить проверку над третьей строчкой функции, и если такое значение chatid уже где-то есть то игнорировать третью строчку. Так же знаю что можно задавать значения по умолчанию, но так и не понял как. Заранее спасибо.


Ответы (1 шт):

Автор решения: icYFTL

На будущее - используйте ORM. Рекомендую SQLAlchemy. А так:

def is_chat_exists(chatid) -> bool:
   con = sqlite3.connect('statsbase.db')
   cursorObj = con.cursor()
   return bool(cursorObj.execute(f'SELECT * FROM stats WHERE chatid={chatid};').fetchall())

Ну и засунем в ваш код:

...
cursorObj = con.cursor()
if not is_chat_exists(chat_id):
    cursorObj.execute("INSERT INTO stats (fromuserid, statpl ,statmn, k) VALUES(?,0,0,0)", [chatid])
cursorObj.execute("UPDATE stats SET statpl = statpl + 1 where fromuserid = ?" , [chatid])
...
→ Ссылка