@vinegarnnl

Почему не записываются данные в бд?

class Database:
    def __init__(self, db_file):
        self.connection = sqlite3.connect('db_file', check_same_thread=False)
        self.cursor = self.connection.cursor()
        db = self.connection
        c = db.cursor()
    def user_exists(self, user_id):
        with self.connection:
            result = self.cursor.execute("Select * FROM 'users' WHERE 'user_id' = ?", (user_id,)).fetchall()
            return bool(len(result))
    def add_user(self, user_id):
        with self.connection:
            return self.cursor.execute("INSERT INTO 'users' (user_id) VALUES (?);", (user_id,))
            self.connection.commit()


@bot.message_handler(commands = ['start', 'help'])
def welcome(message):
    if not db.user_exists(message.chat.id):
        db.add_user(message.chat.id)


все импортировано, ошибок не выдает, но и в бд не записывает данные.
  • Вопрос задан
  • 122 просмотра
Решения вопроса 2
Fockker
@Fockker
Потомок старинного рода Ипатьевых-Колотитьевых
Мужчина, вы издеваетесь?
Я вам уже раз пять повторил ответ на этот вопрос:

имена колонок и таблиц нельзя брать в одинарные кавычки. Потому что в одинарных кавычках пишутся строки.
И если даже иногда sqlite и смотрит сквозь пальцы на такую ошибку (когда она может понять по контексту, что имеется в виду), это не значит, что так будет везти всегда.
Строка 'money' никогда не будет равна числу.
Ответ написан
Vindicar
@Vindicar
def user_exists(self, user_id):
    with self.connection:
        ...
def add_user(self, user_id):
    with self.connection:


По выходу из блока with соединение закроется. Второй блок with его уже не переоткроет.
В таких ситуациях блок with использовать не надо.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
Winsik
@Winsik
сис.админ, недопрограммист :)
Как то так:
result = self.cursor.execute("Select * FROM users WHERE user_id = ?", (user_id,)).fetchall()
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
Сбер Иннополис
от 80 000 ₽
Сбер Москва
от 200 000 до 300 000 ₽
SpectrumData Екатеринбург
от 150 000 до 250 000 ₽