fs-lawrisk/tools/apply_migration_v2.py

52 lines
2.0 KiB
Python
Raw Permalink Normal View History

import os
import pg8000.dbapi as pg
# Load .env manually since run_command environment might miss it
env_path = r"c:\Users\WIN10\Desktop\work\11th-week\法律风险提示-new\市监局-lawRisk-backend\.env"
if os.path.exists(env_path):
print(f"Loading env from {env_path}")
with open(env_path, "r", encoding="utf-8") as f:
for line in f:
line = line.strip()
if not line or line.startswith("#"): continue
if "=" in line:
k, v = line.split("=", 1)
# Remove quotes if present
v = v.strip('\'"')
os.environ[k.strip()] = v
from lawrisk.services.licensing_repo import _lic_pg_conn
def apply_migration():
migration_file = r"c:\Users\WIN10\Desktop\work\11th-week\法律风险提示-new\市监局-lawRisk-backend\data\migration_v2.sql"
with open(migration_file, "r", encoding="utf-8") as f:
sql = f.read()
print(f"Applying migration from {migration_file}...")
conn = None
try:
# Manually create connection if _lic_pg_conn context manager is tricky to use directly with raw SQL script splitting
# But _lic_pg_conn returns a connection.
with _lic_pg_conn() as conn:
cursor = conn.cursor()
# Split by semilcolon to execute statements one by one if needed, or just execute block
# pgcrypto usually requires separation, but simple DDL is fine.
# However, pg8000 might prefer single statements per execute.
statements = [s.strip() for s in sql.split(';') if s.strip()]
for stmt in statements:
print(f"Executing: {stmt[:50]}...")
cursor.execute(stmt)
conn.commit()
print("Migration applied successfully!")
except Exception as e:
print(f"Migration failed: {e}")
if conn:
conn.rollback()
if __name__ == "__main__":
apply_migration()