added sqlite db and commands for gui, help and about windows

This commit is contained in:
2023-12-15 15:31:49 +03:00
parent ecdd7c33ee
commit b934c0f3bd
8 changed files with 265 additions and 84 deletions

View File

@@ -1,51 +1,81 @@
from typing import List
from pydantic import BaseModel, Field, TypeAdapter
from uuid import UUID, uuid4
from typing import LiteralString
import sqlite3
import json
class Record(BaseModel):
id: UUID = Field(default_factory=uuid4)
name: str | None = ''
description:str | None = ''
img_path: str | None = ''
class Record:
id: int | None = None
name: str | None = ""
description: str | None = ""
img_path: str | None = ""
def __init__(self, id, name, img_path, description):
self.id = id
self.name = name
self.img_path = img_path
self.description = description
class DB:
con = None
records: List[Record] = []
path = ""
path = ''
def __init__(self, path=''):
if path != '':
with open(path, 'r') as file:
js_data = json.load(file)
tmp = []
for item in js_data:
tmp.append(json.loads(item))
js_data = tmp
self.records = [Record(**model_data) for model_data in js_data]
def __init__(self, path="AmDB.db"):
if path != "":
self.con = sqlite3.connect(path)
self.cur = self.con.cursor()
self.cur.execute(
"""CREATE TABLE IF NOT EXISTS records (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
path TEXT NOT NULL,
description BLOB
)""")
self.path = path
def add_record(self, name="", description="", img_path=""):
self.cur.execute(
'''INSERT INTO records (name, path, description) VALUES (?, ?, ?)''', (name, img_path, description))
self.con.commit()
def add_record(self, name='', description='', img_path=''):
new_rec = Record(name=name, description=description, img_path=img_path)
self.records.append(new_rec)
with open(self.path, 'w') as file:
model_list_json = [record.model_dump_json() for record in self.records]
json.dump(model_list_json, file)
def edit_record(self, old_name, name="", img_path="", description=""):
record = self.get_record_by_name(old_name)
if record.name != name:
self.cur.execute(
'UPDATE records SET name = ? WHERE name = ?', (name, old_name))
if record.description != description:
self.cur.execute(
'UPDATE records SET description = ? WHERE name = ?', (description, old_name))
if record.img_path != img_path:
self.cur.execute(
'UPDATE records SET path = ? WHERE name = ?', (img_path, old_name))
self.con.commit()
def edit_record(self, id):
pass
def get_record_by_name(self, name):
self.cur.execute('SELECT * FROM records WHERE name=?', (name,))
record = self.cur.fetchone()
if record == None:
return None
return Record(record[0], record[1], record[2], record[3])
def delete_record(self, id):
for i in range(len(self.records)):
if self.records[i].id == id:
self.records.pop(i)
def load_records(self):
self.cur.execute('''SELECT * FROM records''')
records = []
for row in self.cur.fetchall():
new_rec = Record(row[0], row[1], row[2], row[3])
records.append(new_rec)
return records
def delete_record(self, name):
self.cur.execute("DELETE FROM records WHERE name = ?", (name,))
self.con.commit()
# db_t = DB('db.json')
def close(self):
self.con.close()
# db_t.add_record(name='Азовское море',description='полузамкнутое море Атлантического океана на востоке Европы, омывающее побережье России и Украины. Самое мелкое море в мире: глубина не превышает 13,5 метров[2], средняя глубина около 7,4 м (по разным оценкам — от 6,8 до 8 м)[3]. \n Соединяется с Атлантическим океаном длинной цепочкой проливов и морей: Керченский пролив — Чёрное море — пролив Босфор — Мраморное море — пролив Дарданеллы — Эгейское море — Средиземное море — Гибралтарский пролив. По отдалённости от океана Азовское море является самым континентальным морем планеты. Объём воды — 290 км³[4]. \n В древности Азовского моря не существовало и Дон впадал в Чёрное море в районе современного Керченского пролива. Предполагается, что заполнение акватории Азовского моря произошло около 5600 года до н. э.', img_path='img/azovskoe.jpg')
# db_t = DB("AmDB.db")
# db_t.add_record(name='Азовское море',description='\tПолузамкнутое море Атлантического океана на востоке Европы, омывающее побережье России и Украины. Самое мелкое море в мире: глубина не превышает 13,5 метров[2], средняя глубина около 7,4 м (по разным оценкам — от 6,8 до 8 м)[3]. \n\tСоединяется с Атлантическим океаном длинной цепочкой проливов и морей: Керченский пролив — Чёрное море — пролив Босфор — Мраморное море — пролив Дарданеллы — Эгейское море — Средиземное море — Гибралтарский пролив. По отдалённости от океана Азовское море является самым континентальным морем планеты. Объём воды — 290 км³[4]. \n\tВ древности Азовского моря не существовало и Дон впадал в Чёрное море в районе современного Керченского пролива. Предполагается, что заполнение акватории Азовского моря произошло около 5600 года до н. э.', img_path='img/azovskoe.jpg')
# db_t.close()