修正
This commit is contained in:
178
test_environment.py
Normal file
178
test_environment.py
Normal file
@@ -0,0 +1,178 @@
|
||||
#!/usr/bin/env python3
|
||||
"""
|
||||
数据库连接和迁移测试脚本
|
||||
用于验证环境配置是否正确,以及迁移是否能够成功
|
||||
"""
|
||||
|
||||
import sys
|
||||
import psycopg2
|
||||
from psycopg2 import sql, Error
|
||||
from datetime import datetime
|
||||
|
||||
def print_header(text):
|
||||
"""打印标题"""
|
||||
print("\n" + "=" * 80)
|
||||
print(f"【{text}】")
|
||||
print("=" * 80)
|
||||
|
||||
def test_db_connection(host, port, database, user, password):
|
||||
"""测试数据库连接"""
|
||||
print_header("数据库连接测试")
|
||||
|
||||
try:
|
||||
print(f"连接参数:")
|
||||
print(f" 主机: {host}")
|
||||
print(f" 端口: {port}")
|
||||
print(f" 数据库: {database}")
|
||||
print(f" 用户: {user}")
|
||||
|
||||
conn = psycopg2.connect(
|
||||
host=host,
|
||||
port=port,
|
||||
database=database,
|
||||
user=user,
|
||||
password=password,
|
||||
connect_timeout=10
|
||||
)
|
||||
|
||||
print("\n✓ 数据库连接成功!")
|
||||
cur = conn.cursor()
|
||||
|
||||
# 获取服务器版本
|
||||
cur.execute("SELECT version();")
|
||||
version = cur.fetchone()[0]
|
||||
print(f"✓ PostgreSQL 版本: {version.split(',')[0]}")
|
||||
|
||||
conn.close()
|
||||
return True
|
||||
except Error as e:
|
||||
print(f"\n❌ 连接失败: {e}")
|
||||
return False
|
||||
except Exception as e:
|
||||
print(f"\n❌ 未知错误: {e}")
|
||||
return False
|
||||
|
||||
|
||||
def test_table_structure(host, port, database, user, password):
|
||||
"""测试表结构和字段"""
|
||||
print_header("表结构检查")
|
||||
|
||||
try:
|
||||
conn = psycopg2.connect(
|
||||
host=host,
|
||||
port=port,
|
||||
database=database,
|
||||
user=user,
|
||||
password=password
|
||||
)
|
||||
|
||||
cur = conn.cursor()
|
||||
|
||||
# 检查表是否存在
|
||||
cur.execute("""
|
||||
SELECT COUNT(*) FROM information_schema.tables
|
||||
WHERE table_name = 'journal_entries'
|
||||
""")
|
||||
|
||||
if cur.fetchone()[0] == 0:
|
||||
print("❌ 表 journal_entries 不存在!")
|
||||
print("请检查数据库架构是否已初始化。")
|
||||
conn.close()
|
||||
return False
|
||||
|
||||
print("✓ 表 journal_entries 存在")
|
||||
|
||||
# 检查新字段
|
||||
required_fields = [
|
||||
('is_latest', 'BOOLEAN'),
|
||||
('revision_count', 'INTEGER'),
|
||||
('original_entry_id', 'INTEGER')
|
||||
]
|
||||
|
||||
for field_name, expected_type in required_fields:
|
||||
cur.execute("""
|
||||
SELECT data_type FROM information_schema.columns
|
||||
WHERE table_name = 'journal_entries' AND column_name = %s
|
||||
""", (field_name,))
|
||||
|
||||
row = cur.fetchone()
|
||||
if row:
|
||||
actual_type = row[0]
|
||||
print(f"✓ 字段 {field_name}: {actual_type}")
|
||||
else:
|
||||
print(f"⚠️ 字段 {field_name} 不存在(将由迁移脚本创建)")
|
||||
|
||||
conn.close()
|
||||
return True
|
||||
except Error as e:
|
||||
print(f"❌ 检查失败: {e}")
|
||||
return False
|
||||
|
||||
|
||||
def test_migration(host, port, database, user, password):
|
||||
"""运行迁移测试"""
|
||||
print_header("迁移测试(模拟运行)")
|
||||
|
||||
try:
|
||||
from app.db_auto_migration import run_auto_migration
|
||||
|
||||
print("执行自动迁移...")
|
||||
run_auto_migration()
|
||||
print("\n✓ 迁移测试完成!")
|
||||
return True
|
||||
except ImportError:
|
||||
print("⚠️ 无法导入迁移模块(正常,应用启动时会运行)")
|
||||
return True
|
||||
except Exception as e:
|
||||
print(f"❌ 迁移失败: {e}")
|
||||
return False
|
||||
|
||||
|
||||
def main():
|
||||
"""主函数"""
|
||||
print("\n" + "=" * 80)
|
||||
print("【日记条目版本追踪系统 - 环境验证】")
|
||||
print("=" * 80)
|
||||
print(f"执行时间: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n")
|
||||
|
||||
# 数据库连接参数
|
||||
host = '192.168.0.61'
|
||||
port = 55432
|
||||
database = 'njts_acct'
|
||||
user = 'njts_app'
|
||||
password = 'njts_app2025'
|
||||
|
||||
# 运行测试
|
||||
results = []
|
||||
|
||||
# 1. 数据库连接
|
||||
results.append(("数据库连接", test_db_connection(host, port, database, user, password)))
|
||||
|
||||
if results[-1][1]: # 如果连接成功
|
||||
# 2. 表结构
|
||||
results.append(("表结构检查", test_table_structure(host, port, database, user, password)))
|
||||
|
||||
# 3. 迁移测试
|
||||
results.append(("迁移测试", test_migration(host, port, database, user, password)))
|
||||
|
||||
# 打印摘要
|
||||
print_header("检查摘要")
|
||||
|
||||
for test_name, result in results:
|
||||
status = "✓ 通过" if result else "❌ 失败"
|
||||
print(f"{status} - {test_name}")
|
||||
|
||||
# 最终结果
|
||||
print("\n" + "=" * 80)
|
||||
if all(r for _, r in results):
|
||||
print("✓ 所有检查通过!可以启动应用。")
|
||||
print("=" * 80 + "\n")
|
||||
return 0
|
||||
else:
|
||||
print("❌ 某些检查失败。请参考上面的错误信息。")
|
||||
print("=" * 80 + "\n")
|
||||
return 1
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
sys.exit(main())
|
||||
Reference in New Issue
Block a user