migrate to table based tinydb
NOTE to migrate database install tinydb & run migrate.py - added new functions to filter data with db queries - in the storage module
This commit is contained in:
59
webapp/data/migrate.py
Normal file
59
webapp/data/migrate.py
Normal file
@@ -0,0 +1,59 @@
|
||||
import os, json
|
||||
from tinydb import TinyDB
|
||||
from tinydb.storages import Storage
|
||||
|
||||
# Paths
|
||||
OLD_FILE = "orders.json"
|
||||
ARCHIVE_FILE = "orders_old.json"
|
||||
NEW_FILE = "orders_new.json" # final TinyDB JSON file
|
||||
TABLE_NAME = "orders"
|
||||
|
||||
|
||||
class PrettyJSONStorage(Storage):
|
||||
"""Custom TinyDB storage that pretty-prints JSON."""
|
||||
def __init__(self, path):
|
||||
self.path = path
|
||||
|
||||
def read(self):
|
||||
try:
|
||||
with open(self.path, "r", encoding="utf-8") as f:
|
||||
return json.load(f)
|
||||
except FileNotFoundError:
|
||||
return None
|
||||
|
||||
def write(self, data):
|
||||
with open(self.path, "w", encoding="utf-8") as f:
|
||||
json.dump(data, f, ensure_ascii=False, indent=2)
|
||||
|
||||
|
||||
def migrate():
|
||||
if not os.path.isfile(OLD_FILE):
|
||||
print("No old JSON file found. Nothing to migrate.")
|
||||
return
|
||||
|
||||
# Load old orders
|
||||
with open(OLD_FILE, "r", encoding="utf-8") as f:
|
||||
orders = json.load(f) or []
|
||||
|
||||
if not orders:
|
||||
print("No orders found in the old JSON.")
|
||||
return
|
||||
|
||||
print(orders)
|
||||
|
||||
# Open TinyDB and insert into table
|
||||
db = TinyDB(NEW_FILE, storage=PrettyJSONStorage)
|
||||
orders_table = db.table(TABLE_NAME)
|
||||
for order in orders:
|
||||
orders_table.insert(order)
|
||||
|
||||
# Rename old file to archive
|
||||
os.rename(OLD_FILE, ARCHIVE_FILE)
|
||||
os.rename(NEW_FILE, OLD_FILE)
|
||||
print(f"Migrated {len(orders)} orders into table '{TABLE_NAME}'.")
|
||||
print(f"Old JSON file renamed to '{ARCHIVE_FILE}'.")
|
||||
print(f"New TinyDB JSON file is '{OLD_FILE}'.")
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
migrate()
|
||||
Reference in New Issue
Block a user