add basic database functionality
This commit is contained in:
@@ -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())
|
||||
Reference in New Issue
Block a user