-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdatabase.py
More file actions
89 lines (79 loc) · 3.1 KB
/
Copy pathdatabase.py
File metadata and controls
89 lines (79 loc) · 3.1 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
import sqlite3
import os
import datetime
class Database:
def __init__(self, db_file):
self.db_file = db_file
self.conn = sqlite3.connect(self.db_file)
self.cursor = self.conn.cursor()
def setup_tables(self):
"""Erstellt die notwendigen Tabellen, falls sie nicht existieren."""
self.cursor.execute("""
CREATE TABLE IF NOT EXISTS vips (
player_id TEXT PRIMARY KEY,
description TEXT,
expiration TEXT
)
""")
self.cursor.execute("""
CREATE TABLE IF NOT EXISTS receiver_vips (
player_id TEXT PRIMARY KEY,
description TEXT,
expiration TEXT
)
""")
self.cursor.execute("""
CREATE TABLE IF NOT EXISTS sync (
player_id TEXT PRIMARY KEY,
description TEXT,
expiration TEXT
)
""")
self.cursor.execute("""
CREATE TABLE IF NOT EXISTS vip_backup (
player_id TEXT PRIMARY KEY,
description TEXT,
expiration TEXT,
deleted_at TEXT
)
""")
self.conn.commit()
def execute_query(self, query, params=()):
"""Führt eine Abfrage aus und gibt das Ergebnis zurück."""
self.cursor.execute(query, params)
self.conn.commit()
return self.cursor.fetchall()
def bulk_insert(self, table, data):
"""Fügt mehrere Einträge in eine Tabelle ein."""
self.cursor.executemany(f"""
INSERT OR REPLACE INTO {table} (player_id, description, expiration)
VALUES (?, ?, ?)
""", data)
self.conn.commit()
def delete_all(self, table):
"""Löscht alle Einträge aus einer Tabelle."""
self.cursor.execute(f"DELETE FROM {table}")
self.conn.commit()
def fetch_all(self, table):
"""Gibt alle Daten aus einer Tabelle zurück."""
self.cursor.execute(f"SELECT * FROM {table}")
return self.cursor.fetchall()
def backup_vip(self, player_id, description, expiration):
"""Speichert gelöschte VIPs in der Backup-Tabelle und ersetzt vorhandene Einträge."""
timestamp = datetime.datetime.utcnow().isoformat()
self.execute_query("""
INSERT OR REPLACE INTO vip_backup (player_id, description, expiration, deleted_at)
VALUES (?, ?, ?, ?)
""", (player_id, description, expiration, timestamp))
def restore_vip(self, player_id):
"""Stellt einen gelöschten VIP aus dem Backup wieder her."""
result = self.execute_query("SELECT * FROM vip_backup WHERE player_id = ?", (player_id,))
if not result:
return None
player_id, description, expiration, deleted_at = result[0]
self.execute_query("INSERT INTO vips (player_id, description, expiration) VALUES (?, ?, ?)", (player_id, description, expiration))
self.execute_query("DELETE FROM vip_backup WHERE player_id = ?", (player_id,))
return (player_id, description, expiration)
def close(self):
"""Schließt die Verbindung zur Datenbank."""
self.conn.close()