Guest User

Untitled

a guest
May 17th, 2024
757
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.35 KB | None | 0 0
  1. from pydantic import BaseModel
  2.  
  3. import sqlite3
  4.  
  5.  
  6. def dict_factory(cursor, row) -> dict:
  7.     save_dict = {}
  8.  
  9.     for idx, col in enumerate(cursor.description):
  10.         save_dict[col[0]] = row[idx]
  11.  
  12.     return save_dict
  13.  
  14.  
  15. def update_format(sql, parameters: dict) -> tuple[str, list]:
  16.     values = ", ".join([
  17.         f"{item} = ?" for item in parameters
  18.     ])
  19.     sql += f" {values}"
  20.  
  21.     return sql, list(parameters.values())
  22.  
  23.  
  24. def update_format_where(sql, parameters: dict) -> tuple[str, list]:
  25.     sql += " WHERE "
  26.  
  27.     sql += " AND ".join([
  28.         f"{item} = ?" for item in parameters
  29.     ])
  30.  
  31.     return sql, list(parameters.values())
  32.  
  33.  
  34. class MessageRecord(BaseModel):
  35.     user_id: int
  36.     message_history: str
  37.  
  38.  
  39.  
  40. # Работа с юзером
  41. class Messagesx:
  42.     storage_name = "messages"
  43.     PATH_DATABASE = "messages.db"
  44.  
  45.     @staticmethod
  46.     def create_db():
  47.         with sqlite3.connect('messages.db') as conn:
  48.             cursor = conn.cursor()
  49.             cursor.execute('''CREATE TABLE IF NOT EXISTS messages
  50.                              (id INTEGER PRIMARY KEY, user_id INTEGER, message_history TEXT)''')
  51.  
  52.     # Добавление записи
  53.     @staticmethod
  54.     def add(
  55.             user_id: int,
  56.             message_history: str,
  57.  
  58.     ):
  59.  
  60.         with sqlite3.connect(Messagesx.PATH_DATABASE) as con:
  61.             con.row_factory = dict_factory
  62.  
  63.             con.execute(
  64.                 f"""
  65.                    INSERT INTO {Messagesx.storage_name} (
  66.                        user_id,
  67.                        message_history
  68.                    ) VALUES (?, ?)
  69.                """,
  70.                 [
  71.                     user_id,
  72.                     message_history,
  73.                 ],
  74.             )
  75.  
  76.     # Получение записи
  77.     @staticmethod
  78.     def get(**kwargs) -> MessageRecord:
  79.         with sqlite3.connect(Messagesx.PATH_DATABASE) as con:
  80.             con.row_factory = dict_factory
  81.             sql = f"SELECT * FROM {Messagesx.storage_name}"
  82.             sql, parameters = update_format_where(sql, kwargs)
  83.  
  84.             response = con.execute(sql, parameters).fetchone()
  85.  
  86.             if response is not None:
  87.                 response = MessageRecord(**response)
  88.  
  89.             return response
  90.  
  91.     # Получение записей
  92.     @staticmethod
  93.     def gets(**kwargs) -> list[MessageRecord]:
  94.         with sqlite3.connect(Messagesx.PATH_DATABASE) as con:
  95.             con.row_factory = dict_factory
  96.             sql = f"SELECT * FROM {Messagesx.storage_name}"
  97.             sql, parameters = update_format_where(sql, kwargs)
  98.  
  99.             response = con.execute(sql, parameters).fetchall()
  100.  
  101.             if len(response) >= 1:
  102.                 response = [MessageRecord(**cache_object) for cache_object in response]
  103.  
  104.             return response
  105.  
  106.     # Получение всех записей
  107.     @staticmethod
  108.     def get_all() -> list[MessageRecord]:
  109.         with sqlite3.connect(Messagesx.PATH_DATABASE) as con:
  110.             con.row_factory = dict_factory
  111.             sql = f"SELECT * FROM {Messagesx.storage_name}"
  112.  
  113.             response = con.execute(sql).fetchall()
  114.  
  115.             if len(response) >= 1:
  116.                 response = [MessageRecord(**cache_object) for cache_object in response]
  117.  
  118.             return response
  119.  
  120.     # Редактирование записи
  121.     @staticmethod
  122.     def update(user_id, **kwargs):
  123.         with sqlite3.connect(Messagesx.PATH_DATABASE) as con:
  124.             con.row_factory = dict_factory
  125.             sql = f"UPDATE {Messagesx.storage_name} SET"
  126.             sql, parameters = update_format(sql, kwargs)
  127.             parameters.append(user_id)
  128.  
  129.             con.execute(sql + "WHERE user_id = ?", parameters)
  130.  
  131.     # Удаление записи
  132.     @staticmethod
  133.     def delete(**kwargs):
  134.         with sqlite3.connect(Messagesx.PATH_DATABASE) as con:
  135.             con.row_factory = dict_factory
  136.             sql = f"DELETE FROM {Messagesx.storage_name}"
  137.             sql, parameters = update_format_where(sql, kwargs)
  138.  
  139.             con.execute(sql, parameters)
  140.  
  141.     # Очистка всех записей
  142.     @staticmethod
  143.     def clear():
  144.         with sqlite3.connect(Messagesx.PATH_DATABASE) as con:
  145.             con.row_factory = dict_factory
  146.             sql = f"DELETE FROM {Messagesx.storage_name}"
  147.  
  148.             con.execute(sql)
Advertisement
Add Comment
Please, Sign In to add comment