File size: 2,872 Bytes
3870101
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
import sqlite3
import gradio as gr

# Connect to SQLite database (or create it)
conn = sqlite3.connect("users.db", check_same_thread=False)
cursor = conn.cursor()

# Create table if not exists
cursor.execute('''
CREATE TABLE IF NOT EXISTS users (
    id INTEGER PRIMARY KEY AUTOINCREMENT,
    name TEXT NOT NULL,
    email TEXT NOT NULL UNIQUE
)
''')
conn.commit()

# CRUD functions

def create_user(name, email):
    try:
        cursor.execute("INSERT INTO users (name, email) VALUES (?, ?)", (name, email))
        conn.commit()
        return "User created successfully!"
    except sqlite3.IntegrityError:
        return "Email already exists."

def read_users():
    cursor.execute("SELECT * FROM users")
    rows = cursor.fetchall()
    if not rows:
        return "No users found."
    result = ""
    for row in rows:
        result += f"ID: {row[0]}, Name: {row[1]}, Email: {row[2]}\n"
    return result

def update_user(user_id, name, email):
    cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
    if cursor.fetchone() is None:
        return "User ID not found."
    try:
        cursor.execute("UPDATE users SET name = ?, email = ? WHERE id = ?", (name, email, user_id))
        conn.commit()
        return "User updated successfully!"
    except sqlite3.IntegrityError:
        return "Email already exists."

def delete_user(user_id):
    cursor.execute("SELECT * FROM users WHERE id = ?", (user_id,))
    if cursor.fetchone() is None:
        return "User ID not found."
    cursor.execute("DELETE FROM users WHERE id = ?", (user_id,))
    conn.commit()
    return "User deleted successfully!"

# Gradio interface

with gr.Blocks() as demo:
    gr.Markdown("# Simple SQLite3 CRUD with Gradio")

    with gr.Tab("Create User"):
        name_in = gr.Textbox(label="Name")
        email_in = gr.Textbox(label="Email")
        create_btn = gr.Button("Create User")
        create_out = gr.Textbox(label="Output")
        create_btn.click(create_user, inputs=[name_in, email_in], outputs=create_out)

    with gr.Tab("Read Users"):
        read_btn = gr.Button("Show All Users")
        read_out = gr.Textbox(label="Users", lines=10)
        read_btn.click(read_users, outputs=read_out)

    with gr.Tab("Update User"):
        update_id = gr.Number(label="User ID")
        update_name = gr.Textbox(label="New Name")
        update_email = gr.Textbox(label="New Email")
        update_btn = gr.Button("Update User")
        update_out = gr.Textbox(label="Output")
        update_btn.click(update_user, inputs=[update_id, update_name, update_email], outputs=update_out)

    with gr.Tab("Delete User"):
        delete_id = gr.Number(label="User ID")
        delete_btn = gr.Button("Delete User")
        delete_out = gr.Textbox(label="Output")
        delete_btn.click(delete_user, inputs=delete_id, outputs=delete_out)

demo.launch(debug=True)