@lok101

Почему sqlite3 не сохраняет запись?

Всем доброго дня, учусь осваивать БД и столкнулся с такой проблемой, один и тот же код при вызове из разных мест, в одном случае сохраняет запись в БД, а в другом нет. Я не могу понять причину.

import sqlite3


class DataBase:
    table = [
        'date TEXT',
        'id TEXT',
        'username TEXT',
        'promocode TEXT',
    ]

    def __init__(self, database_path: str):
        self.db = sqlite3.connect(database_path)
        self.cursor = self.db.cursor()

    def create_table(self, table_name):
        query = f'''CREATE TABLE IF NOT EXISTS {table_name}(
                    {DataBase.table[0]},
                    {DataBase.table[1]},
                    {DataBase.table[2]},
                    {DataBase.table[3]}
                    )'''
        self.execute_query(query)

    def add_user_entry(self, date, user_id, username, table_name):
        query = f'''INSERT INTO {table_name}(date, id, username)
                    VALUES('{date}', '{user_id}', '{username}')'''
        self.execute_query(query)

    def add_column(self, table_name, new_value, key_value, column='promocode', key='id'):
        query = f'''UPDATE {table_name} SET {column} = "{new_value}" WHERE {key} = "{key_value}"'''
        self.execute_query(query)

    def execute_query(self, query):
        self.cursor.execute(query)
        self.db.commit()


def create_entry_db(date, username, user_id, table_name='promocode', path='../promocode.db'):
    db = DataBase(path)
    db.create_table(table_name)
    db.add_user_entry(username=username, user_id=user_id, date=date, table_name=table_name)


При таком вызове, находящемся в одном файле с кодом выше, запись сохраняется в БД:
create_entry_db('date', 'username', 'user_id')

А при таком вызове из другого файла - нет:
data_base.create_entry_db('date', 'username', 'user_id')


Код полностью выполняется и ошибок не происходит.
  • Вопрос задан
  • 559 просмотров
Решения вопроса 1
Vindicar
@Vindicar
RTFM!
f'''INSERT INTO {table_name}(date, id, username)
                    VALUES('{date}', '{user_id}', '{username}')'''

Вот почему бы не почитать хоть какой-нибудь туториал или официальную документацию(начиная со слов "SQL operations usually need to use values from Python variables")?
Я понимаю динамическое имя таблицы (хотя это тоже сомнительный ход), но уж параметры-то можно вставлять по-человечески.

А вообще, выбери что-то одно. Если ты осваиваешь SQL, не выделывайся с динамической генерацией запросов, освойся с простыми вещами для начала. Если нет - используй ORM, тот же peewee для начала, пусть он за тебя генерит запросы.

Ну и до кучи, как ты проверяешь, что в базу ничего не добавляется?
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

Похожие вопросы