This commit is contained in:
admin
2026-02-20 15:47:27 +09:00
parent c60cbf2d9a
commit 584530937b
108 changed files with 12112 additions and 416 deletions

178
test_environment.py Normal file
View 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())