Hjgugugjhuhjggg commited on
Commit
da70b73
·
verified ·
1 Parent(s): 6e846da

Create database.py

Browse files
Files changed (1) hide show
  1. database.py +108 -0
database.py ADDED
@@ -0,0 +1,108 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import sqlite3
2
+ from sqlite3 import Error
3
+ from pydantic import BaseModel
4
+
5
+ class User(BaseModel):
6
+ username: str
7
+ email: str
8
+ hashed_password: str
9
+
10
+
11
+ def create_connection(db_file):
12
+ """ create a database connection to a SQLite database """
13
+ conn = None
14
+ try:
15
+ conn = sqlite3.connect(db_file)
16
+ return conn
17
+ except Error as e:
18
+ print(e)
19
+ return conn
20
+
21
+
22
+ def create_table(conn):
23
+ """ create a table in the database """
24
+ sql = """ CREATE TABLE IF NOT EXISTS users (
25
+ id integer PRIMARY KEY,
26
+ username text NOT NULL UNIQUE,
27
+ email text NOT NULL UNIQUE,
28
+ hashed_password text NOT NULL
29
+ ); """
30
+ try:
31
+ cursor = conn.cursor()
32
+ cursor.execute(sql)
33
+ except Error as e:
34
+ print(e)
35
+
36
+
37
+ def create_db_and_table():
38
+ database = "users.db"
39
+ conn = create_connection(database)
40
+ if conn is not None:
41
+ create_table(conn)
42
+ conn.close()
43
+ else:
44
+ print("Error! cannot create the database connection.")
45
+
46
+
47
+ def insert_user(user_data: dict):
48
+ conn = create_connection('users.db')
49
+ cur = conn.cursor()
50
+ sql = """ INSERT INTO users(username,email,hashed_password)
51
+ VALUES(?,?,?) """
52
+ cur.execute(sql, (user_data['username'], user_data['email'], user_data['hashed_password']))
53
+ conn.commit()
54
+ last_row_id = cur.lastrowid
55
+ conn.close()
56
+ if last_row_id:
57
+ # Fetch the inserted user for consistency
58
+ return get_user(user_data['username'])
59
+ else:
60
+ return None
61
+
62
+
63
+ def get_user(username: str):
64
+ conn = create_connection('users.db')
65
+ cur = conn.cursor()
66
+ cur.execute("SELECT * FROM users WHERE username=?", (username,))
67
+ user = cur.fetchone()
68
+ conn.close()
69
+ if user:
70
+ return User(username=user[1], email=user[2], hashed_password=user[3])
71
+ else:
72
+ return None
73
+
74
+
75
+ def delete_user(username: str):
76
+ conn = create_connection('users.db')
77
+ cur = conn.cursor()
78
+ cur.execute("DELETE FROM users WHERE username=?", (username,))
79
+ conn.commit()
80
+ rows_affected = cur.rowcount
81
+ conn.close()
82
+ return rows_affected > 0
83
+
84
+
85
+ def update_user(username: str, updated_data: dict):
86
+ conn = create_connection('users.db')
87
+ cur = conn.cursor()
88
+ sql = """ UPDATE users
89
+ SET email = ?,
90
+ hashed_password = ?
91
+ WHERE username = ?"""
92
+ cur.execute(sql, (updated_data['email'], updated_data['hashed_password'], username))
93
+ conn.commit()
94
+ rows_affected = cur.rowcount
95
+ conn.close()
96
+ if rows_affected > 0:
97
+ # Fetch the updated user for consistency
98
+ return get_user(username)
99
+ else:
100
+ return None
101
+
102
+ def get_all_users():
103
+ conn = create_connection('users.db')
104
+ cur = conn.cursor()
105
+ cur.execute("SELECT * FROM users")
106
+ users = cur.fetchall()
107
+ conn.close()
108
+ return [User(username=user[1], email=user[2], hashed_password=user[3]) for user in users]