from pathlib import Path import sys from sqlalchemy import text ROOT = Path(__file__).resolve().parents[1] sys.path.insert(0, str(ROOT)) from app.database import engine # noqa: E402 def _column_exists(conn, table_name: str, column_name: str) -> bool: return bool(conn.execute( text(""" SELECT COUNT(1) FROM information_schema.columns WHERE table_schema = DATABASE() AND table_name = :table_name AND column_name = :column_name """), {"table_name": table_name, "column_name": column_name}, ).scalar()) def main() -> None: with engine.begin() as conn: if not _column_exists(conn, "products", "process_unit_price_yuan"): conn.execute(text(""" ALTER TABLE products ADD COLUMN process_unit_price_yuan DECIMAL(12,4) NOT NULL DEFAULT 0 AFTER operator_count """)) if not _column_exists(conn, "production_report_items", "process_unit_price_yuan"): conn.execute(text(""" ALTER TABLE production_report_items ADD COLUMN process_unit_price_yuan DECIMAL(12,4) NOT NULL DEFAULT 0 AFTER operator_count """)) conn.execute(text(""" UPDATE production_report_items item JOIN products product ON product.attendance_point_name = item.attendance_point_name AND product.project_no = item.project_no AND product.product_name = item.product_name AND product.process_name = IFNULL(item.process_name, '') AND product.device_no = '' SET item.process_unit_price_yuan = product.process_unit_price_yuan WHERE item.process_unit_price_yuan IS NULL OR item.process_unit_price_yuan = 0 """)) print("process unit price columns migrated") if __name__ == "__main__": main()