Reverting back to admin pages as login and updates in the mobile api
This commit is contained in:
80
pg_to_sqlite_backup.py
Normal file
80
pg_to_sqlite_backup.py
Normal file
@@ -0,0 +1,80 @@
|
||||
# pg_to_sqlite_backup.py
|
||||
import os
|
||||
import sys
|
||||
import django
|
||||
from django.conf import settings
|
||||
from django.core.management import call_command
|
||||
from django.db import connections, DEFAULT_DB_ALIAS
|
||||
|
||||
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "eventify.settings")
|
||||
django.setup()
|
||||
|
||||
SQLITE_PATH = "backup.sqlite3"
|
||||
BACKUP_ALIAS = "backup"
|
||||
|
||||
|
||||
def ensure_backup_db():
|
||||
# Add a SQLite backup database alias
|
||||
settings.DATABASES[BACKUP_ALIAS] = {
|
||||
"ENGINE": "django.db.backends.sqlite3",
|
||||
"NAME": os.path.abspath(SQLITE_PATH),
|
||||
}
|
||||
# Remove existing file so migrate creates a fresh DB
|
||||
if os.path.exists(SQLITE_PATH):
|
||||
os.remove(SQLITE_PATH)
|
||||
|
||||
# Run migrations on the backup DB
|
||||
print("Running migrations on backup (SQLite)…")
|
||||
call_command("migrate", database=BACKUP_ALIAS, interactive=False, verbosity=0)
|
||||
print("SQLite schema created at", SQLITE_PATH)
|
||||
|
||||
|
||||
def copy_all_tables():
|
||||
pg_conn = connections[DEFAULT_DB_ALIAS] # default = PostgreSQL
|
||||
sqlite_conn = connections[BACKUP_ALIAS] # new SQLite
|
||||
|
||||
pg_cursor = pg_conn.cursor()
|
||||
sqlite_cursor = sqlite_conn.cursor()
|
||||
|
||||
tables = pg_conn.introspection.table_names()
|
||||
|
||||
for table in tables:
|
||||
# Fetch column names from PostgreSQL
|
||||
cols = [c.name for c in pg_conn.introspection.get_table_description(pg_cursor, table)]
|
||||
col_list = ", ".join(f'"{c}"' for c in cols)
|
||||
placeholders = ", ".join(["?"] * len(cols))
|
||||
|
||||
# Fetch all rows
|
||||
pg_cursor.execute(f'SELECT {col_list} FROM "{table}"')
|
||||
rows = pg_cursor.fetchall()
|
||||
|
||||
# Insert into SQLite
|
||||
if rows:
|
||||
insert_sql = f'INSERT INTO "{table}" ({col_list}) VALUES ({placeholders})'
|
||||
sqlite_cursor.executemany(insert_sql, rows)
|
||||
|
||||
print(f"Copied {len(rows)} rows from {table}")
|
||||
|
||||
sqlite_conn.commit()
|
||||
pg_cursor.close()
|
||||
sqlite_cursor.close()
|
||||
|
||||
|
||||
def main():
|
||||
if "--force" not in sys.argv:
|
||||
print("Refusing to run without --force (destructive for existing backup file).")
|
||||
sys.exit(1)
|
||||
|
||||
# Safety: ensure default DB is PostgreSQL
|
||||
engine = settings.DATABASES[DEFAULT_DB_ALIAS]["ENGINE"]
|
||||
if "postgresql" not in engine:
|
||||
print("Default database is not PostgreSQL. Aborting.")
|
||||
sys.exit(1)
|
||||
|
||||
ensure_backup_db()
|
||||
copy_all_tables()
|
||||
print("Done. SQLite backup at", SQLITE_PATH)
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user