Files
Bot-Template/tgbot/services/api_sqlite.py
T
2022-09-24 20:38:34 +03:00

121 lines
4.4 KiB
Python

# - *- coding: utf- 8 - *-
import sqlite3
from tgbot.data.config import PATH_DATABASE
from tgbot.utils.const_functions import get_unix, get_date
# Преобразование БД словаря
def dict_factory(cursor, row):
this_dict = {}
for idx, col in enumerate(cursor.description):
this_dict[col[0]] = row[idx]
return this_dict
####################################################################################################
##################################### ФОРМАТИРОВАНИЕ ЗАПРОСОВ ######################################
# Форматирование запроса без аргументов
def update_format_with_args(sql, parameters: dict):
if "XXX" not in sql:
sql += " XXX "
values = ", ".join([
f"{item} = ?" for item in parameters
])
sql = sql.replace("XXX", values)
return sql, list(parameters.values())
# Форматирование запроса с аргументами
def update_format_args(sql, parameters: dict):
sql = f"{sql} WHERE "
sql += " AND ".join([
f"{item} = ?" for item in parameters
])
return sql, list(parameters.values())
####################################### ЗАПРОСЫ К БАЗЕ ДАННЫХ ######################################
####################################################################################################
# Добавление пользователя
def add_userx(user_id, user_login, user_name, user_surname, user_fullname):
with sqlite3.connect(PATH_DATABASE) as con:
con.row_factory = dict_factory
con.execute("INSERT INTO storage_users "
"(user_id, user_login, user_name, user_surname, user_fullname, user_date, user_unix) "
"VALUES (?, ?, ?, ?, ?, ?, ?)",
[user_id, user_login, user_name, user_surname, user_fullname, get_date(), get_unix()])
# Получение пользователя
def get_userx(**kwargs):
with sqlite3.connect(PATH_DATABASE) as con:
con.row_factory = dict_factory
sql = "SELECT * FROM storage_users"
sql, parameters = update_format_args(sql, kwargs)
return con.execute(sql, parameters).fetchone()
# Получение пользователей
def get_usersx(**kwargs):
with sqlite3.connect(PATH_DATABASE) as con:
con.row_factory = dict_factory
sql = "SELECT * FROM storage_users"
sql, parameters = update_format_args(sql, kwargs)
return con.execute(sql, parameters).fetchall()
# Получение всех пользователей
def get_all_usersx():
with sqlite3.connect(PATH_DATABASE) as con:
con.row_factory = dict_factory
sql = "SELECT * FROM storage_users"
return con.execute(sql).fetchall()
# Редактирование пользователя
def update_userx(user_id, **kwargs):
with sqlite3.connect(PATH_DATABASE) as con:
con.row_factory = dict_factory
sql = f"UPDATE storage_users SET"
sql, parameters = update_format_with_args(sql, kwargs)
parameters.append(user_id)
con.execute(sql + "WHERE user_id = ?", parameters)
# Удаление пользователя
def delete_userx(**kwargs):
with sqlite3.connect(PATH_DATABASE) as con:
con.row_factory = dict_factory
sql = "DELETE FROM storage_users"
sql, parameters = update_format_args(sql, kwargs)
con.execute(sql, parameters)
######################################## СОЗДАНИЕ БАЗЫ ДАННЫХ ######################################
# Создание всех таблиц для Базы Данных
def create_dbx():
with sqlite3.connect(PATH_DATABASE) as con:
con.row_factory = dict_factory
# Таблица с хранением пользователей
if len(con.execute("PRAGMA table_info(storage_users)").fetchall()) == 8:
print("DB was found(1/1)")
else:
con.execute("CREATE TABLE storage_users("
"increment INTEGER PRIMARY KEY AUTOINCREMENT, "
"user_id INTEGER,"
"user_login TEXT,"
"user_name TEXT,"
"user_surname TEXT,"
"user_fullname TEXT,"
"user_date TIMESTAMP,"
"user_unix INTEGER)")
print("DB was not found(1/1) | Creating...")