48 lines
1.9 KiB
Python
48 lines
1.9 KiB
Python
# -*- coding: utf-8 -*-
|
||
"""为已有数据库添加新列(traffic、countries)并将部分列改为可空。仅需运行一次。"""
|
||
import sys
|
||
from app import app, db
|
||
from sqlalchemy import text
|
||
|
||
def run():
|
||
with app.app_context():
|
||
engine = db.engine
|
||
dialect = engine.dialect.name
|
||
if dialect == "mysql":
|
||
with engine.connect() as conn:
|
||
for col, spec in [
|
||
("traffic", "VARCHAR(64) NULL"),
|
||
("countries", "VARCHAR(255) NULL"),
|
||
]:
|
||
try:
|
||
conn.execute(text("ALTER TABLE vps_plans ADD COLUMN {} {}".format(col, spec)))
|
||
conn.commit()
|
||
print("Added column:", col)
|
||
except Exception as e:
|
||
if "Duplicate column" in str(e) or "already exists" in str(e).lower():
|
||
print("Column", col, "already exists, skip.")
|
||
else:
|
||
print("Add", col, ":", e)
|
||
for col, spec in [
|
||
("region", "VARCHAR(128) NULL"),
|
||
("vcpu", "INT NULL"),
|
||
("memory_gb", "INT NULL"),
|
||
("storage_gb", "INT NULL"),
|
||
("bandwidth_mbps", "INT NULL"),
|
||
("price_cny", "DOUBLE NULL"),
|
||
("price_usd", "DOUBLE NULL"),
|
||
]:
|
||
try:
|
||
conn.execute(text("ALTER TABLE vps_plans MODIFY COLUMN {} {}".format(col, spec)))
|
||
conn.commit()
|
||
print("Modified column:", col)
|
||
except Exception as e:
|
||
print("Modify", col, ":", e)
|
||
else:
|
||
print("Only MySQL migration is implemented. For SQLite, recreate the DB or add columns manually.")
|
||
print("Done.")
|
||
|
||
if __name__ == "__main__":
|
||
run()
|
||
sys.exit(0)
|