更新服务器信息为新的 IP 地址,调整相关文档和代码中的默认配置,确保部署和连接的一致性。同时,优化订单管理界面,增强商品信息的格式化逻辑,提升用户体验。
This commit is contained in:
158
scripts/migrate_db_simple.py
Normal file
158
scripts/migrate_db_simple.py
Normal file
@@ -0,0 +1,158 @@
|
||||
#!/usr/bin/env python3
|
||||
# -*- coding: utf-8 -*-
|
||||
"""数据库迁移脚本 - 简化版"""
|
||||
|
||||
import sys
|
||||
import pymysql
|
||||
|
||||
# 数据库配置(从 lib/db.ts 获取)
|
||||
DB_CONFIG = {
|
||||
'host': '56b4c23f6853c.gz.cdb.myqcloud.com',
|
||||
'port': 14413,
|
||||
'user': 'cdb_outerroot',
|
||||
'password': 'Zhiqun1984',
|
||||
'database': 'soul_miniprogram',
|
||||
'charset': 'utf8mb4'
|
||||
}
|
||||
|
||||
def execute_sql(cursor, sql, description):
|
||||
"""执行SQL并打印结果"""
|
||||
try:
|
||||
cursor.execute(sql)
|
||||
print(f"[OK] {description}")
|
||||
return True
|
||||
except pymysql.err.OperationalError as e:
|
||||
if 'Duplicate' in str(e) or 'already exists' in str(e):
|
||||
print(f"[SKIP] {description} (already exists)")
|
||||
return True
|
||||
else:
|
||||
print(f"[ERROR] {description}: {e}")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"[ERROR] {description}: {e}")
|
||||
return False
|
||||
|
||||
def main():
|
||||
print("="*60)
|
||||
print("Database Migration: referral_bindings table upgrade")
|
||||
print("="*60)
|
||||
print()
|
||||
|
||||
try:
|
||||
# 连接数据库
|
||||
print("Connecting to database...")
|
||||
conn = pymysql.connect(**DB_CONFIG)
|
||||
cursor = conn.cursor()
|
||||
print(f"[OK] Connected to: {DB_CONFIG['database']}")
|
||||
print()
|
||||
except Exception as e:
|
||||
print(f"[ERROR] Database connection failed: {e}")
|
||||
sys.exit(1)
|
||||
|
||||
# 1. 添加新字段
|
||||
print("Step 1: Adding new fields")
|
||||
print("-"*60)
|
||||
|
||||
execute_sql(
|
||||
cursor,
|
||||
"""ALTER TABLE referral_bindings
|
||||
ADD COLUMN last_purchase_date DATETIME NULL COMMENT 'Last purchase time'""",
|
||||
"Add field: last_purchase_date"
|
||||
)
|
||||
|
||||
execute_sql(
|
||||
cursor,
|
||||
"""ALTER TABLE referral_bindings
|
||||
ADD COLUMN purchase_count INT DEFAULT 0 COMMENT 'Purchase count'""",
|
||||
"Add field: purchase_count"
|
||||
)
|
||||
|
||||
execute_sql(
|
||||
cursor,
|
||||
"""ALTER TABLE referral_bindings
|
||||
ADD COLUMN total_commission DECIMAL(10,2) DEFAULT 0.00 COMMENT 'Total commission'""",
|
||||
"Add field: total_commission"
|
||||
)
|
||||
|
||||
print()
|
||||
|
||||
# 2. 添加索引
|
||||
print("Step 2: Adding indexes")
|
||||
print("-"*60)
|
||||
|
||||
execute_sql(
|
||||
cursor,
|
||||
"""ALTER TABLE referral_bindings
|
||||
ADD INDEX idx_referee_status (referee_id, status)""",
|
||||
"Add index: idx_referee_status"
|
||||
)
|
||||
|
||||
execute_sql(
|
||||
cursor,
|
||||
"""ALTER TABLE referral_bindings
|
||||
ADD INDEX idx_expiry_purchase (expiry_date, purchase_count, status)""",
|
||||
"Add index: idx_expiry_purchase"
|
||||
)
|
||||
|
||||
print()
|
||||
|
||||
# 3. 修改 status 枚举
|
||||
print("Step 3: Updating status enum")
|
||||
print("-"*60)
|
||||
|
||||
execute_sql(
|
||||
cursor,
|
||||
"""ALTER TABLE referral_bindings
|
||||
MODIFY COLUMN status ENUM('active', 'converted', 'expired', 'cancelled')
|
||||
DEFAULT 'active' COMMENT 'Binding status'""",
|
||||
"Update status enum type"
|
||||
)
|
||||
|
||||
print()
|
||||
|
||||
# 提交更改
|
||||
conn.commit()
|
||||
|
||||
# 4. 验证字段
|
||||
print("Step 4: Verifying migration")
|
||||
print("-"*60)
|
||||
|
||||
cursor.execute("SHOW COLUMNS FROM referral_bindings")
|
||||
columns = cursor.fetchall()
|
||||
|
||||
required_fields = ['last_purchase_date', 'purchase_count', 'total_commission']
|
||||
found_fields = [col[0] for col in columns]
|
||||
|
||||
for field in required_fields:
|
||||
if field in found_fields:
|
||||
print(f"[OK] Field {field} exists")
|
||||
else:
|
||||
print(f"[ERROR] Field {field} not found")
|
||||
|
||||
print()
|
||||
|
||||
# 5. 显示索引
|
||||
print("Step 5: Current indexes")
|
||||
print("-"*60)
|
||||
|
||||
cursor.execute("SHOW INDEX FROM referral_bindings")
|
||||
indexes = cursor.fetchall()
|
||||
|
||||
index_names = set()
|
||||
for idx in indexes:
|
||||
if idx[2] not in index_names:
|
||||
print(f" - {idx[2]} ({idx[4]})")
|
||||
index_names.add(idx[2])
|
||||
|
||||
print()
|
||||
|
||||
# 关闭连接
|
||||
cursor.close()
|
||||
conn.close()
|
||||
|
||||
print("="*60)
|
||||
print("[OK] Migration completed!")
|
||||
print("="*60)
|
||||
|
||||
if __name__ == "__main__":
|
||||
main()
|
||||
Reference in New Issue
Block a user