@DRON_161Rus

Как автоматизировать запись в sqlite на Python, регулируя количество перезаписываемых переменных?

Суть в том, чтобы каждый раз не писать conn cur cur.execute и т.д., а просто вводить произвольное количество параметров, которые нужно передать в функцию для добавления в базу данных.

Я не понимаю, как на входе показать, что, например, date не нужно уже записывать, чтобы при этом всё работало (если пробовать None, то это обнуляет запись в базе).

def UPD_in_db(name, date, ank, idd):
    conn = sqlite3.connect('baza.sql')
    cur = conn.cursor()

    cur.execute("UPDATE users SET name = ? date = ? ank = ? WHERE gi = ?", (name, date, ank, idd))
    conn.commit()

    cur.close()
    conn.close()

UPD_in_db(Anton, 05 mar, Olala lalala, id99938)
  • Вопрос задан
  • 127 просмотров
Решения вопроса 1
Mike_Ro
@Mike_Ro Куратор тега Python
Python, JS, WordPress, SEO, Bots, Adversting
import sqlite3

def update_db(**params):
    # Если 'idd' нет в параметрах
    if 'idd' not in params:
        raise ValueError("Ты забыл передать 'idd'! Это обязательно.")

    # Достаем 'idd' из параметров
    user_id = params.pop('idd')

    # Создаем строку для SQL запроса
    set_clause = ', '.join(f"{key} = ?" for key in params.keys())
    query = f"UPDATE users SET {set_clause} WHERE gi = ?"

    # Подготавливаем значения для SQL запроса
    values = list(params.values()) + [user_id]

    # Подключаемся к БД
    with sqlite3.connect('baza.sql') as conn:
        cur = conn.cursor()
        cur.execute(query, values)
        conn.commit()

update_db(name="Антон", date="05 марта", ank="Ой всё!", idd="id99938")
update_db(name="Сергей", idd="id99939")
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Python
Седой и строгий
Например так как-то
def UPD_in_db(condition, **kwargs):
    with sqlite3.connect('baza.sql') as conn:
        with conn.cursor() as cur:
            items = kwargs.items()  # Для совместимости со старыми версия Python, у которых несортированный словарь
            statement = 'UPDATE users SET ' + ', '.join(k + ' = ?' for k, v in items) + ' WHERE gi = ?'
            params = tuple(v for k,v in items) + (condition,)
            cur.execute(statement, params)
            conn.commit()


UPD_in_db(99938, name='John', ank='lalala')
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
30 апр. 2024, в 16:03
2500 руб./за проект
30 апр. 2024, в 15:24
3000 руб./за проект
30 апр. 2024, в 15:11
500 руб./в час