Advertisement
ivandev

Untitled

Jul 8th, 2021
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Python 4.38 KB | None | 0 0
  1. import sqlite3
  2.  
  3. class SQLiter:
  4.     def __init__(self, path_to_db="main.db"):
  5.         self.path_to_db = path_to_db
  6.  
  7.     @property
  8.     def connection(self):
  9.         """СВЯЗЫВАЕМСЯ С БАЗОЙ"""
  10.         return sqlite3.connect(self.path_to_db)
  11.  
  12.     def execute(self, sql: str, parameters: tuple = None, fetchone=False, fetchall=False, commit=False):
  13.         """МЕТОД СОЗДАЮЩИЙ СОЕДИНЕНИЕ, ОТПРАВЛЯЮЩИЙ ЗАПРОС БАЗЕ И СОХРАНЯЮЩИЙ ИЗМЕНЕНИЯ"""
  14.         if not parameters:
  15.             parameters = ()
  16.         connection = self.connection
  17.         connection.set_trace_callback(logger)
  18.         cursor = connection.cursor()
  19.         data = None
  20.         cursor.execute(sql, parameters)
  21.  
  22.         if commit:
  23.             connection.commit()
  24.         if fetchall:
  25.             """если нужны все значения"""
  26.             data = cursor.fetchall()
  27.         if fetchone:
  28.             """если нужно одно значение"""
  29.             data = cursor.fetchone()
  30.         connection.close()
  31.         return data
  32.  
  33.     def create_table_users(self):
  34.         """создаем таблицу юзеров"""
  35.         sql = """
  36.        CREATE TABLE Users (
  37.            id int NOT NULL,
  38.            Name varchar(255) NOT NULL,
  39.            email varchar(255),
  40.            PRIMARY KEY (id)
  41.            );
  42. """
  43.         self.execute(sql, commit=True)
  44.  
  45.     @staticmethod
  46.     def format_args(sql, parameters: dict):
  47.         """МЕТОД ПОЗВОЛЯЮЩИЙ ПОДСТАВЛЯТЬ АРГУМЕНТЫ В SQL ЗАПРОСЫ"""
  48.         sql += " AND ".join([
  49.             f"{item} = ?" for item in parameters
  50.         ])
  51.         return sql, tuple(parameters.values())
  52.  
  53.     def add_user(self, id: int, name: str, email: str = None):
  54.         """добавляем юзера"""
  55.         # SQL_EXAMPLE = "INSERT INTO Users(id, Name, email) VALUES(1, 'John', 'John@gmail.com')"
  56.  
  57.         sql = """
  58.        INSERT INTO Users(id, Name, email) VALUES(?, ?, ?)
  59.        """
  60.         self.execute(sql, parameters=(id, name, email), commit=True)
  61.  
  62.     def select_all_users(self):
  63.         """забираем из базы всех юзеров"""
  64.         sql = """
  65.        SELECT * FROM Users
  66.        """
  67.         return self.execute(sql, fetchall=True)
  68.  
  69.     def select_user(self, **kwargs):
  70.         """Выбираем юзера"""
  71.         # SQL_EXAMPLE = "SELECT * FROM Users where id=1 AND Name='John'"
  72.         sql = "SELECT * FROM Users WHERE "
  73.         sql, parameters = self.format_args(sql, kwargs)
  74.  
  75.         return self.execute(sql, parameters=parameters, fetchone=True)
  76.  
  77.     def count_users(self):
  78.         """считаем всех юзеров"""
  79.         return self.execute("SELECT COUNT(*) FROM Users;", fetchone=True)
  80.  
  81.     def update_user_email(self, email, id):
  82.         """делаем апдейт данных в базе"""
  83.         # SQL_EXAMPLE = "UPDATE Users SET email=mail@gmail.com WHERE id=12345"
  84.  
  85.         sql = f"""
  86.        UPDATE Users SET email=? WHERE id=?
  87.        """
  88.         return self.execute(sql, parameters=(email, id), commit=True)
  89.  
  90.     def delete_users(self):
  91.         """удаляем всех юзеров"""
  92.         self.execute("DELETE FROM Users WHERE TRUE", commit=True)
  93.  
  94.  
  95. def logger(statement):
  96.     """ВЫВОДИМ РЕЗУЛЬТАТЫ В КОНСОЛЬ"""
  97.     print(f"""
  98. _____________________________________________________        
  99. Executing:
  100. {statement}
  101. _____________________________________________________
  102. """)
  103.  
  104.  
  105.  
  106.  
  107.  
  108.  
  109. def test():
  110.     db = SQLiter()
  111.     db.create_table_users()
  112.     db.add_user(1, "One", "email")
  113.     db.add_user(2, "Vasya", "vv@gmail.com")
  114.     db.add_user(3, 1, 1)
  115.     db.add_user(4, 1, 1)
  116.     db.add_user(5, "John", "john@mail.com")
  117.  
  118.    
  119.  
  120.  
  121.     users = db.select_all_users()
  122.     print(f"Получил всех пользователей: {users}")
  123.  
  124.     user = db.select_user(Name="John", id=5)
  125.     print(f"Получил пользователя: {user}")
  126.  
  127.     users = db.select_all_users()
  128.     print(f"Получил всех пользователей: {users}")
  129.  
  130.     db.update_user_email("ivan@ivan.ru", 1)
  131.  
  132.     user = db.select_user(id=1)
  133.     print(f"Получил пользователя c изм имейлом: {user}")
  134.  
  135.     count = db.count_users()
  136.     print(f"ВСЕГО ПОЛЬЗОВАТЕЛЕЙ: {count}")
  137.  
  138.  
  139. test()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement