| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- """
- 测试数据库连接
- 验证数据库配置是否正确,连接是否正常
- """
- import sys
- from src.models import get_engine, init_db, DecodeVideo
- from src.models.database import get_database_url
- from src.utils.logger import get_logger
- logger = get_logger(__name__)
- def test_connection():
- """测试数据库连接"""
- print("=" * 60)
- print("数据库连接测试")
- print("=" * 60)
-
- try:
- # 1. 显示连接信息(隐藏密码)
- database_url = get_database_url()
- # 隐藏密码显示
- safe_url = database_url.split('@')[0].split(':')[0] + ':***@' + '@'.join(database_url.split('@')[1:])
- print(f"\n✓ 数据库连接URL: {safe_url}")
-
- # 2. 测试连接
- print("\n正在测试数据库连接...")
- engine = get_engine()
-
- # 尝试连接
- with engine.connect() as conn:
- result = conn.execute("SELECT 1 as test")
- row = result.fetchone()
- if row and row[0] == 1:
- print("✓ 数据库连接成功!")
- else:
- print("✗ 数据库连接测试失败")
- return False
-
- # 3. 测试表是否存在
- print("\n检查 decode_videos 表...")
- from sqlalchemy import inspect
- inspector = inspect(engine)
- tables = inspector.get_table_names()
-
- if 'decode_videos' in tables:
- print("✓ decode_videos 表已存在")
-
- # 显示表结构
- columns = inspector.get_columns('decode_videos')
- print(f"\n表结构 ({len(columns)} 个字段):")
- for col in columns:
- nullable = "NULL" if col['nullable'] else "NOT NULL"
- print(f" - {col['name']}: {col['type']} ({nullable})")
-
- # 统计记录数
- from src.models import get_db
- db = next(get_db())
- try:
- count = db.query(DecodeVideo).count()
- print(f"\n✓ 当前记录数: {count}")
- except Exception as e:
- print(f"⚠ 查询记录数时出错: {e}")
- finally:
- db.close()
- else:
- print("⚠ decode_videos 表不存在")
- print("\n是否要创建表?(y/n): ", end="")
- choice = input().strip().lower()
- if choice == 'y':
- print("\n正在创建表...")
- init_db()
- print("✓ 表创建完成")
- else:
- print("跳过表创建")
-
- print("\n" + "=" * 60)
- print("✓ 所有测试通过!")
- print("=" * 60)
- return True
-
- except Exception as e:
- print(f"\n✗ 数据库连接失败: {e}")
- print("\n请检查以下配置:")
- print(" 1. 数据库主机地址是否正确")
- print(" 2. 数据库端口是否开放")
- print(" 3. 用户名和密码是否正确")
- print(" 4. 数据库名称是否正确")
- print(" 5. 网络连接是否正常(外网地址需要公网访问权限)")
- import traceback
- traceback.print_exc()
- return False
- if __name__ == "__main__":
- success = test_connection()
- sys.exit(0 if success else 1)
|