add basic database functionality #9

Merged
celex merged 5 commits from 2-add-functionality-to-list-chores into main 2026-05-18 15:49:14 +01:00
Showing only changes of commit 926669f28f - Show all commits
+50
View File
@@ -0,0 +1,50 @@
import sqlite3
from pathlib import Path
import os
from dataclasses import dataclass, fields
@dataclass
class Task:
title: str
done: bool
def __post_init__(self):
for field in fields(self):
if field.type is bool:
value = getattr(self, field.name)
setattr(self, field.name, bool(value))
class Database:
def __init__(self, filepath: Path|str):
is_new_database = not Path(filepath).exists()
self.con = sqlite3.connect(filepath)
self.cur = self.con.cursor()
if is_new_database:
self.initialize_table()
def initialize_table(self):
self.cur.execute("CREATE TABLE tasks(title TEXT, done INTEGER)")
def create_task(self, title: str, done:bool=False) -> None:
converted_done = ""
if done:
converted_done = "TRUE"
else:
converted_done = "FALSE"
self.cur.execute(f"""INSERT INTO tasks VALUES ("{title}", {converted_done});""")
self.con.commit()
def get_all_tasks(self) -> list[Task]:
self.cur.execute("SELECT * FROM tasks")
raw_data = self.cur.fetchall()
return [Task(*task) for task in raw_data]
if __name__ == '__main__':
try:
os.remove("DEBUG.db")
except FileNotFoundError:
pass
database = Database("DEBUG.db")
database.create_task("test")
print(database.get_all_tasks())