Madhu Chitikela
🎓 Adaptive Learning Coach — IRT + LangChain + Streamlit
2843ebd
Raw
History Blame Contribute Delete
4.29 kB
import sqlite3
from datetime import datetime
DB = "learning.db"
def init_db():
conn = sqlite3.connect(DB)
c = conn.cursor()
# Users table
c.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
topic TEXT NOT NULL,
created TEXT
)
""")
# Quiz sessions table
c.execute("""
CREATE TABLE IF NOT EXISTS sessions (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
topic TEXT,
score REAL,
difficulty REAL,
timestamp TEXT,
FOREIGN KEY (user_id) REFERENCES users(id)
)
""")
# Weak topics table
c.execute("""
CREATE TABLE IF NOT EXISTS weak_topics (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
topic TEXT,
score REAL,
FOREIGN KEY (user_id) REFERENCES users(id)
)
""")
# Study plans table
c.execute("""
CREATE TABLE IF NOT EXISTS study_plans (
id INTEGER PRIMARY KEY AUTOINCREMENT,
user_id INTEGER,
plan TEXT,
created TEXT,
FOREIGN KEY (user_id) REFERENCES users(id)
)
""")
conn.commit()
conn.close()
print("✅ Database ready!")
def create_user(name: str, topic: str) -> int:
conn = sqlite3.connect(DB)
c = conn.cursor()
c.execute(
"INSERT INTO users (name, topic, created) VALUES (?,?,?)",
(name, topic, datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
)
user_id = c.lastrowid
conn.commit()
conn.close()
return user_id
def get_user(name: str) -> dict:
conn = sqlite3.connect(DB)
c = conn.cursor()
c.execute("SELECT * FROM users WHERE name=? ORDER BY id DESC LIMIT 1", (name,))
row = c.fetchone()
conn.close()
if row:
return {"id": row[0], "name": row[1], "topic": row[2], "created": row[3]}
return None
def save_session(user_id: int, topic: str, score: float, difficulty: float):
conn = sqlite3.connect(DB)
c = conn.cursor()
c.execute(
"INSERT INTO sessions (user_id, topic, score, difficulty, timestamp) VALUES (?,?,?,?,?)",
(user_id, topic, score, difficulty, datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
)
conn.commit()
conn.close()
def save_weak_topics(user_id: int, topics: list):
conn = sqlite3.connect(DB)
c = conn.cursor()
c.execute("DELETE FROM weak_topics WHERE user_id=?", (user_id,))
for t in topics:
c.execute(
"INSERT INTO weak_topics (user_id, topic, score) VALUES (?,?,?)",
(user_id, t["topic"], t["score"])
)
conn.commit()
conn.close()
def save_study_plan(user_id: int, plan: str):
conn = sqlite3.connect(DB)
c = conn.cursor()
c.execute(
"INSERT INTO study_plans (user_id, plan, created) VALUES (?,?,?)",
(user_id, plan, datetime.now().strftime("%Y-%m-%d %H:%M:%S"))
)
conn.commit()
conn.close()
def get_sessions(user_id: int) -> list:
conn = sqlite3.connect(DB)
c = conn.cursor()
c.execute(
"SELECT topic, score, difficulty, timestamp FROM sessions WHERE user_id=? ORDER BY id DESC LIMIT 30",
(user_id,)
)
rows = c.fetchall()
conn.close()
return rows
def get_weak_topics(user_id: int) -> list:
conn = sqlite3.connect(DB)
c = conn.cursor()
c.execute("SELECT topic, score FROM weak_topics WHERE user_id=?", (user_id,))
rows = c.fetchall()
conn.close()
return rows
def get_stats(user_id: int) -> dict:
conn = sqlite3.connect(DB)
c = conn.cursor()
c.execute("SELECT COUNT(*), AVG(score) FROM sessions WHERE user_id=?", (user_id,))
row = c.fetchone()
conn.close()
return {
"total_sessions": row[0] or 0,
"avg_score": round(row[1] or 0, 1)
}
if __name__ == "__main__":
init_db()
uid = create_user("Madhu", "Machine Learning")
print(f"✅ User created: ID={uid}")
save_session(uid, "Neural Networks", 75.0, 0.6)
print("✅ Session saved!")
print("Stats:", get_stats(uid))