147 lines
3.8 KiB
Python
147 lines
3.8 KiB
Python
|
|
#!/usr/bin/env python
|
|||
|
|
# -*- coding: utf-8 -*-
|
|||
|
|
"""
|
|||
|
|
测试打包后的SQL Server连接
|
|||
|
|
在打包后的exe中运行此脚本来诊断SQL Server连接问题
|
|||
|
|
"""
|
|||
|
|
import sys
|
|||
|
|
import os
|
|||
|
|
|
|||
|
|
print("=" * 80)
|
|||
|
|
print("SQL Server 连接诊断工具")
|
|||
|
|
print("=" * 80)
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
# 检查运行环境
|
|||
|
|
if getattr(sys, 'frozen', False):
|
|||
|
|
print("✓ 运行在打包后的环境中")
|
|||
|
|
print(f" 基础路径: {sys._MEIPASS}")
|
|||
|
|
else:
|
|||
|
|
print("✓ 运行在开发环境中")
|
|||
|
|
print(f" 当前路径: {os.getcwd()}")
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
# 测试pymssql
|
|||
|
|
print("-" * 80)
|
|||
|
|
print("测试 pymssql")
|
|||
|
|
print("-" * 80)
|
|||
|
|
try:
|
|||
|
|
import pymssql
|
|||
|
|
print("✓ pymssql 导入成功")
|
|||
|
|
print(f" 版本: {pymssql.__version__}")
|
|||
|
|
print(f" 路径: {pymssql.__file__}")
|
|||
|
|
|
|||
|
|
# 检查_mssql模块
|
|||
|
|
try:
|
|||
|
|
import _mssql
|
|||
|
|
print("✓ _mssql 模块导入成功")
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"✗ _mssql 模块导入失败: {e}")
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"✗ pymssql 导入失败: {e}")
|
|||
|
|
import traceback
|
|||
|
|
traceback.print_exc()
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
# 测试pyodbc
|
|||
|
|
print("-" * 80)
|
|||
|
|
print("测试 pyodbc")
|
|||
|
|
print("-" * 80)
|
|||
|
|
try:
|
|||
|
|
import pyodbc
|
|||
|
|
print("✓ pyodbc 导入成功")
|
|||
|
|
print(f" 版本: {pyodbc.version}")
|
|||
|
|
print(f" 路径: {pyodbc.__file__}")
|
|||
|
|
|
|||
|
|
# 列出可用的ODBC驱动
|
|||
|
|
try:
|
|||
|
|
drivers = pyodbc.drivers()
|
|||
|
|
print(f"✓ 可用的ODBC驱动 ({len(drivers)}个):")
|
|||
|
|
for driver in drivers:
|
|||
|
|
print(f" - {driver}")
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"✗ 无法列出ODBC驱动: {e}")
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"✗ pyodbc 导入失败: {e}")
|
|||
|
|
import traceback
|
|||
|
|
traceback.print_exc()
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
# 测试连接(如果提供了连接信息)
|
|||
|
|
print("-" * 80)
|
|||
|
|
print("测试实际连接")
|
|||
|
|
print("-" * 80)
|
|||
|
|
print("请输入SQL Server连接信息(直接回车跳过):")
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
server = input("服务器地址 (例如: localhost 或 192.168.1.100): ").strip()
|
|||
|
|
if server:
|
|||
|
|
database = input("数据库名称: ").strip()
|
|||
|
|
username = input("用户名: ").strip()
|
|||
|
|
password = input("密码: ").strip()
|
|||
|
|
|
|||
|
|
print()
|
|||
|
|
print("尝试使用 pymssql 连接...")
|
|||
|
|
try:
|
|||
|
|
conn = pymssql.connect(
|
|||
|
|
server=server,
|
|||
|
|
database=database,
|
|||
|
|
user=username,
|
|||
|
|
password=password,
|
|||
|
|
timeout=5
|
|||
|
|
)
|
|||
|
|
print("✓ pymssql 连接成功!")
|
|||
|
|
conn.close()
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"✗ pymssql 连接失败: {e}")
|
|||
|
|
|
|||
|
|
print()
|
|||
|
|
print("尝试使用 pyodbc 连接...")
|
|||
|
|
try:
|
|||
|
|
# 尝试不同的驱动
|
|||
|
|
drivers_to_try = [
|
|||
|
|
"ODBC Driver 17 for SQL Server",
|
|||
|
|
"ODBC Driver 18 for SQL Server",
|
|||
|
|
"SQL Server Native Client 11.0",
|
|||
|
|
"SQL Server"
|
|||
|
|
]
|
|||
|
|
|
|||
|
|
connected = False
|
|||
|
|
for driver in drivers_to_try:
|
|||
|
|
try:
|
|||
|
|
conn_str = (
|
|||
|
|
f"DRIVER={{{driver}}};"
|
|||
|
|
f"SERVER={server};"
|
|||
|
|
f"DATABASE={database};"
|
|||
|
|
f"UID={username};"
|
|||
|
|
f"PWD={password};"
|
|||
|
|
"TrustServerCertificate=yes;"
|
|||
|
|
)
|
|||
|
|
conn = pyodbc.connect(conn_str, timeout=5)
|
|||
|
|
print(f"✓ pyodbc 连接成功!使用驱动: {driver}")
|
|||
|
|
conn.close()
|
|||
|
|
connected = True
|
|||
|
|
break
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f" 尝试驱动 '{driver}' 失败: {e}")
|
|||
|
|
|
|||
|
|
if not connected:
|
|||
|
|
print("✗ pyodbc 所有驱动都连接失败")
|
|||
|
|
|
|||
|
|
except Exception as e:
|
|||
|
|
print(f"✗ pyodbc 连接失败: {e}")
|
|||
|
|
else:
|
|||
|
|
print("跳过连接测试")
|
|||
|
|
|
|||
|
|
print()
|
|||
|
|
print("=" * 80)
|
|||
|
|
print("诊断完成")
|
|||
|
|
print("=" * 80)
|
|||
|
|
print()
|
|||
|
|
|
|||
|
|
# 如果在打包环境中,等待用户按键
|
|||
|
|
if getattr(sys, 'frozen', False):
|
|||
|
|
input("按回车键退出...")
|