Не работает else | python aiogram sqlite3
Проверяю, есть ли пользователь в бд и в зависимости от результата проверки должны выполнятся разные функции, но else просто игнорируется. Может я что-то не вижу? Если в if убирать "not", то будет выполняться только вторая функция. Ищу решение уже несколько часов...
Код:
import sqlite3
import random
class Database:
def __init__(self, db_file):
self.connection = sqlite3.connect(db_file)
self.cursor = self.connection.cursor()
def user_ex(self, user_id):
with self.connection:
result = self.cursor.execute("SELECT * FROM 'ferma' WHERE 'user_id' = ?", (user_id,)).fetchall()
return bool(len(result))
import config
import logging
import random
from aiogram import Bot, Dispatcher, executor, types
from db import Database
#log level
logging.basicConfig(level=logging.INFO)
#Инициализация бота
bot = Bot(token=config.TOKEN)
dp = Dispatcher(bot)
db = Database('database.db')
@dp.message_handler(commands = ['farm'])
async def farm(message: types.Message):
orens = random.randint(4, 50)
balance = 0
if (not db.user_ex(message.from_user.id)):
db.add_user(message.from_user.id, message.from_user.username, orens)
await message.answer("Вы заработали " + str(orens) + " оренов!")
else:
await message.answer("Вы уже есть в базе!")
#run long-polling
if __name__ == "__main__":
executor.start_polling(dp, skip_updates=True)
Ответы (1 шт):
Автор решения: Roman-Stop RU aggression in UA
→ Ссылка
У вас ошибка в запросе. Должно быть:
self.cursor.execute("SELECT * FROM ferma WHERE user_id = ?", (user_id,))
Значение в одинарных кавычках в SQL трактуется, как строковый литерал, а вам нужно, сравнивать с колонкой в таблице. Для этого нужно использовать поле или без кавычек вообще или в двойных кавычках. У вас же получается сравнение строки 'user_id' буквально со значением в переменной user_id.