sqliter.py 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. import sqlite3
  2. class Database:
  3. def __init__(self, path_to_db="data/main.db"):
  4. self.path_to_db = path_to_db
  5. @property
  6. def connection(self):
  7. return sqlite3.connect(self.path_to_db, timeout=2)
  8. def execute(self, sql: str, parameters: tuple = None, fetchone=False, fetchall=False, commit=False):
  9. if not parameters:
  10. parameters = tuple()
  11. connection = self.connection
  12. connection.set_trace_callback(logger)
  13. cursor = connection.cursor()
  14. data = None
  15. cursor.execute(sql, parameters)
  16. if commit:
  17. connection.commit()
  18. if fetchone:
  19. data = cursor.fetchone()
  20. if fetchall:
  21. data = cursor.fetchall()
  22. connection.close()
  23. return data
  24. def create_table_(self):
  25. sql = """
  26. CREATE TABLE Users (
  27. id int NOT NULL,
  28. username varchar(255) NULL,
  29. Name varchar(255) NOT NULL,
  30. PRIMARY KEY(id)
  31. );
  32. """
  33. self.execute(sql, commit=True)
  34. def add_word(self, word: str):
  35. sql = "INSERT INTO stop_words(word) VALUES(?);"
  36. parameters = (word,)
  37. self.execute(sql, parameters, commit=True)
  38. def select_all_word(self):
  39. sql = "SELECT * FROM stop_words"
  40. return self.execute(sql, fetchall=True)
  41. def delete_word(self, word: str):
  42. sql = 'DELETE FROM stop_words WHERE word=?'
  43. return self.execute(sql, parameters=(word,), commit=True)
  44. @staticmethod
  45. def format_args(sql, parameters: dict):
  46. sql += " AND".join([
  47. f" {item} = ? " for item in parameters
  48. ])
  49. return sql, tuple(parameters.values())
  50. # def add_channel(self, user_id: int, chat_id: int, channel_id: int):
  51. def add_channel(self, chat_id: int, channel_id: int):
  52. sql = "INSERT INTO Chats VALUES(?,?);"
  53. parameters = (chat_id, channel_id,)
  54. self.execute(sql, parameters, commit=True)
  55. def delete_channel(self, chat_id, channel_id):
  56. sql = 'DELETE FROM Chats WHERE chat_id = ? AND require_channel_id = ?'
  57. # sql, parameters = self.format_args(sql, kwargs)
  58. # return self.execute(sql, parameters, fetchone=True)
  59. params = (chat_id, channel_id,)
  60. return self.execute(sql, params, commit=True)
  61. def select_channels(self, chat_id):
  62. sql = f'SELECT * FROM Chats WHERE chat_id={chat_id};'
  63. return self.execute(sql, fetchall=True)
  64. def select_channels_by_user(self, user_id):
  65. sql = f'SELECT * FROM Chats WHERE user_id={user_id};'
  66. return self.execute(sql, fetchall=True)
  67. def select_all_chats(self):
  68. sql = f'SELECT * FROM Chats;'
  69. return self.execute(sql, fetchall=True)
  70. def update_chat_in_channel(self, chat_id, channel_id):
  71. sql = "UPDATE Chats SET chat_id=? WHERE require_channel_id=?"
  72. return self.execute(sql, parameters=(chat_id, channel_id), commit=True)
  73. def select_white_list(self):
  74. sql = f'SELECT * FROM white_list;'
  75. return self.execute(sql, fetchall=True)
  76. def select_white_list_by_chat(self, chat_id: int):
  77. sql = f'SELECT * FROM white_list WHERE chat_id=(?);'
  78. parameters = (chat_id,)
  79. return self.execute(sql, parameters, fetchall=True)
  80. def add_to_white_list(self, chat_id: int, user_id: int):
  81. sql = "INSERT INTO white_list VALUES(?, ?);"
  82. parameters = (chat_id, user_id,)
  83. self.execute(sql, parameters, commit=True)
  84. '''
  85. def select_user(self, **kwargs):
  86. sql = 'SELECT * FROM Users WHERE '
  87. sql, parameters = self.format_args(sql, kwargs)
  88. return self.execute(sql, parameters, fetchone=True)
  89. def get_billing(self, **kwargs):
  90. sql = 'SELECT * FROM billing WHERE '
  91. sql, parameters = self.format_args(sql, kwargs)
  92. return self.execute(sql, parameters, fetchone=True)
  93. def get_all_billing(self, **kwargs):
  94. sql = 'SELECT * FROM billing'
  95. # sql, parameters = self.format_args(sql, kwargs)
  96. return self.execute(sql, fetchall=True)
  97. def count_users(self):
  98. return self.execute("SELECT COUNT(*) FROM Users;", fetchone=True)
  99. def update_bill_status(self, billing_status, billing_id):
  100. sql = "UPDATE billing SET billing_status=? WHERE billing_id=?"
  101. return self.execute(sql, parameters=(billing_status, billing_id), commit=True)
  102. # def delete_bill(self):
  103. # return self.execute('DELETE FROM billing WHERE billing')
  104. def delete_users(self):
  105. return self.execute('DELETE FROM Users WHERE True')
  106. def drop_table(self, name):
  107. return self.execute(f'DROP TABLE {name}')
  108. '''
  109. def logger(statement):
  110. print(f"""{'=' * 40}\nEXECUTING: {statement}\n{'=' * 40}""")