78 lines
2.2 KiB
Python
78 lines
2.2 KiB
Python
#!/usr/bin/env python3
|
||
"""
|
||
数据库迁移脚本:添加 entry_zone 字段到 trading_signals 表
|
||
|
||
使用方法:
|
||
python scripts/migrate_add_entry_zone.py
|
||
|
||
或者在服务器上直接执行 SQL:
|
||
sqlite3 backend/stock_agent.db "ALTER TABLE trading_signals ADD COLUMN entry_zone FLOAT;"
|
||
"""
|
||
import sqlite3
|
||
import os
|
||
from pathlib import Path
|
||
|
||
|
||
def migrate_add_entry_zone():
|
||
"""添加 entry_zone 字段"""
|
||
|
||
# 数据库路径
|
||
db_path = Path(__file__).parent.parent / "backend" / "stock_agent.db"
|
||
|
||
if not db_path.exists():
|
||
print(f"❌ 数据库文件不存在: {db_path}")
|
||
return False
|
||
|
||
try:
|
||
# 连接数据库
|
||
conn = sqlite3.connect(str(db_path))
|
||
cursor = conn.cursor()
|
||
|
||
# 检查字段是否已存在
|
||
cursor.execute("PRAGMA table_info(trading_signals)")
|
||
columns = [col[1] for col in cursor.fetchall()]
|
||
|
||
if 'entry_zone' in columns:
|
||
print("✅ entry_zone 字段已存在,无需迁移")
|
||
conn.close()
|
||
return True
|
||
|
||
# 添加字段
|
||
print(f"📝 正在添加 entry_zone 字段到 {db_path}...")
|
||
cursor.execute("ALTER TABLE trading_signals ADD COLUMN entry_zone FLOAT")
|
||
conn.commit()
|
||
|
||
# 验证
|
||
cursor.execute("PRAGMA table_info(trading_signals)")
|
||
columns = [col[1] for col in cursor.fetchall()]
|
||
|
||
if 'entry_zone' in columns:
|
||
print("✅ entry_zone 字段添加成功")
|
||
conn.close()
|
||
return True
|
||
else:
|
||
print("❌ 字段添加失败")
|
||
conn.close()
|
||
return False
|
||
|
||
except Exception as e:
|
||
print(f"❌ 迁移失败: {e}")
|
||
return False
|
||
|
||
|
||
if __name__ == "__main__":
|
||
print("=" * 60)
|
||
print("数据库迁移:添加 entry_zone 字段")
|
||
print("=" * 60)
|
||
|
||
success = migrate_add_entry_zone()
|
||
|
||
if success:
|
||
print("\n✅ 迁移完成!")
|
||
print("\n请重启服务以使更改生效:")
|
||
print(" pm2 restart stock-agent")
|
||
else:
|
||
print("\n❌ 迁移失败!")
|
||
print("\n如果自动迁移失败,可以手动执行 SQL:")
|
||
print(" sqlite3 backend/stock_agent.db \"ALTER TABLE trading_signals ADD COLUMN entry_zone FLOAT;\"")
|