工作台重命名:无界·无界 → 学会·无界
- ALL_TENANTS / session / seed / migrations 全部同步 - 新增 migrate_rename_tenant() 数据迁移,启动自动 UPDATE 所有表 - migrations/ 模式重构(参考 SalesManager)
This commit is contained in:
61
backend/migrations/columns.py
Normal file
61
backend/migrations/columns.py
Normal file
@@ -0,0 +1,61 @@
|
||||
"""migrations/columns.py — 加列迁移(老表补字段,幂等)"""
|
||||
|
||||
|
||||
def _add_column_if_missing(conn, table, column, ddl):
|
||||
"""检查列是否存在,不存在才加(幂等)"""
|
||||
from flask_app import _exec, mysql, logger
|
||||
|
||||
cur = conn.cursor(dictionary=True)
|
||||
cur.execute(f"SHOW COLUMNS FROM {table} LIKE %s", (column,))
|
||||
exists = cur.fetchone()
|
||||
cur.close()
|
||||
if not exists:
|
||||
try:
|
||||
_exec(conn, ddl)
|
||||
print(f"[migrate] {table}.{column} 列已添加")
|
||||
except mysql.connector.Error as e:
|
||||
logger.debug(f"add column {table}.{column} skipped: {e}")
|
||||
|
||||
|
||||
def migrate_add_columns():
|
||||
"""为老表补齐后续新增的字段"""
|
||||
from flask_app import db
|
||||
|
||||
conn = db()
|
||||
try:
|
||||
# tenant 字段(多工作台支持)
|
||||
for table in ["sales_leads", "follow_up_records", "business_proposals",
|
||||
"operation_projects", "product_versions", "finance_records",
|
||||
"project_tasks"]:
|
||||
_add_column_if_missing(conn, table, "tenant",
|
||||
f"ALTER TABLE {table} ADD COLUMN tenant VARCHAR(100) NOT NULL DEFAULT '科普·无界'")
|
||||
|
||||
# business_proposals 扩展字段
|
||||
_add_column_if_missing(conn, "business_proposals", "proposal_type",
|
||||
"ALTER TABLE business_proposals ADD COLUMN proposal_type VARCHAR(100) NOT NULL DEFAULT '业务方案'")
|
||||
_add_column_if_missing(conn, "business_proposals", "notes",
|
||||
"ALTER TABLE business_proposals ADD COLUMN notes VARCHAR(2000) NOT NULL DEFAULT ''")
|
||||
|
||||
# product_versions 扩展字段
|
||||
_add_column_if_missing(conn, "product_versions", "platform",
|
||||
"ALTER TABLE product_versions ADD COLUMN platform VARCHAR(100) NOT NULL DEFAULT ''")
|
||||
|
||||
# project_tasks 扩展字段
|
||||
_add_column_if_missing(conn, "project_tasks", "status",
|
||||
"ALTER TABLE project_tasks ADD COLUMN status VARCHAR(50) NOT NULL DEFAULT '未开始'")
|
||||
_add_column_if_missing(conn, "project_tasks", "sort_order",
|
||||
"ALTER TABLE project_tasks ADD COLUMN sort_order INT NOT NULL DEFAULT 0")
|
||||
_add_column_if_missing(conn, "project_tasks", "priority",
|
||||
"ALTER TABLE project_tasks ADD COLUMN priority VARCHAR(10) NOT NULL DEFAULT 'P2'")
|
||||
|
||||
# project_finances 12 个月度预算字段(确收/毛利/回款/费用)
|
||||
for m in ["01","02","03","04","05","06","07","08","09","10","11","12"]:
|
||||
for field in ["rev", "gross", "payment", "cost"]:
|
||||
col = f"{field}_2026_{m}"
|
||||
_add_column_if_missing(conn, "project_finances", col,
|
||||
f"ALTER TABLE project_finances ADD COLUMN {col} DOUBLE NOT NULL DEFAULT 0")
|
||||
|
||||
conn.commit()
|
||||
print("[migrate] 加列迁移完成")
|
||||
finally:
|
||||
conn.close()
|
||||
Reference in New Issue
Block a user