@PesyCorm

Как избежать повторения кода с открытием базы (sqlite3, Python)?

Привет! Подскажите, как я могу вынести логику открытия дб и проверки создана ли таблица?
Например, есть две функции: одна добавляет пользователя, другая возвращает список пользователей. И каждый раз мне нужно проверять есть ли таблица, создавать если нет
def add_user_into_db(login, password):

	with sqlite3.connect('users_base.db') as db:
		db_cursor = db.cursor()
		db_cursor.execute("CREATE TABLE IF NOT EXISTS users (login TEXT, password TEXT)")
		db.commit()

		добавить_пользователя()

def select_from_db(sel):

	with sqlite3.connect('users_base.db') as db:
		db_cursor = db.cursor()
		db_cursor.execute("CREATE TABLE IF NOT EXISTS users (login TEXT, password TEXT)")
		db.commit()

		список_пользователей()

Как я могу избежать повторения кода с открытием базы и проверкой таблицы?
Спасибо за ответ!
  • Вопрос задан
  • 145 просмотров
Решения вопроса 1
phaggi
@phaggi Куратор тега Python
лужу, паяю, ЭВМы починяю
PesyCorm, я вижу это всё примерно вот так:
Код
import sqlite3


def test_db(db):
    try:
        db_cursor = db.cursor()
        db_cursor.execute("CREATE TABLE IF NOT EXISTS users (login TEXT, password TEXT)")
        db.commit()
        return True
    except DBError:  # тут надо правильную ошибку правильно обрабатывать, я не копался, какую именно и как
        return False


def add_user_into_db(db, login, password):
    if test_db(db):
        добавить_пользователя(login, password)


def select_from_db(db, sel):
    if test_db(db):
        return список_пользователей(sel)


if __name__ == '__main__':
    login = 'my_login'
    password = 'my_password'
    sel = 'string_for_select'
    with sqlite3.connect('users_base.db') as db:
        add_user_into_db(db=db, login=login, password=password)
        print(select_from_db(db=db, sel=sel))


Это тоже не лучший вариант, по-хорошему надо уж делать через pythonway и ООП, т.е. через ORM SQLAlchemy и всё такое.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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