Не записываются данные в таблицу sqlite3
conn = sqlite3.connect("database.db")
cursor = conn.cursor()
@bot.event
async def on_message(message):
cursor.execute(f"SELECT id FROM userinfo where id={int(message.author.id)+int(message.guild.id)}")
if cursor.fetchone()==None:
cursor.execute(f"INSERT INTO userinfo VALUES ({int(message.author.id)+int(message.guild.id)}, 0, 1)")
conn.commit()
else:
pass
conn.commit()
# if len(message.content) >=10:
id = int(message.author.id)+int(message.guild.id)
for row in cursor.execute(f"SELECT xp, lvl FROM userinfo where id={id}"):
reward = random.randint(5,25)
xp=row[0]+reward
level=row[1]
need = round(((90+level)*level)+level*(level+round((level*2)*level)))
if level == 0:
level = 1
if xp >= need:
lvl=int(level)+1
await message.channel.send(f'Поздравляю! {message.author.mention} перешёл на уровень {lvl}!!!')
cursor.execute(f'UPDATE userinfo SET xp={xp}, lvl={lvl} where id={id}')
conn.commit()
await bot.process_commands(message)
При получении данных о пользователе, постоянно возвращается результат
xp = 0 lvl = 1 need = 94
Ответы (1 шт):
Автор решения: Ephsylion
→ Ссылка
У тебя проблема заключается в том, что ты не закрываешь соединение. Попробуй сделать вот так:
def req_to_db(req,need_to_commit=False):
conn = sqlite3.connect("database.db")
cursor = conn.cursor()
cursor.execute(req)
cursor.fetchall()
if(need_to_commit):
cursor.commit()
conn.close()
@bot.event
async def on_message(message):
result = req_to_db(f"SELECT id FROM userinfo where id={int(message.author.id)+int(message.guild.id)}")
if [x[0] for x in result]==[]:
result = req_to_db(f"INSERT INTO userinfo VALUES ({int(message.author.id)+int(message.guild.id)}, 0, 1)",need_to_commit=True)
id = int(message.author.id)+int(message.guild.id)
for row in req_to_db(f"SELECT xp, lvl FROM userinfo where id={id}"):
reward = random.randint(5,25)
xp=row[0]+reward
level=row[1]
need = round(((90+level)*level)+level*(level+round((level*2)*level)))
if level == 0:
level = 1
if xp >= need:
lvl=int(level)+1
await message.channel.send(f'Поздравляю! {message.author.mention} перешёл на уровень {lvl}!!!')
req_to_db(f'UPDATE userinfo SET xp={xp}, lvl={lvl} where id={id}', need_to_commit=True)
await bot.process_commands(message)
Должно сработать. Если не хочешь изменять свой код, то просто закрывай соединение в конце функции(перед await).