GH/test_mdf_functionality.py

213 lines
5.8 KiB
Python
Raw Permalink Normal View History

#!/usr/bin/env python3
"""
MDF文件导出功能测试脚本
测试SQL Server数据库文件导出功能
"""
import os
import sys
import tempfile
from pathlib import Path
# 添加项目路径到Python路径
sys.path.append(os.path.dirname(os.path.abspath(__file__)))
def check_sql_server_connection():
"""检查SQL Server连接"""
print("🔍 检查SQL Server连接...")
try:
import pyodbc
# 测试连接参数
test_servers = [
('localhost', 'MSSQLSERVER'),
('.', 'MSSQLSERVER'),
('localhost\\SQLEXPRESS', 'SQLEXPRESS')
]
connected = False
for server, instance in test_servers:
try:
if instance == 'MSSQLSERVER':
conn_str = f"DRIVER={{SQL Server}};SERVER={server};Trusted_Connection=yes;"
else:
conn_str = f"DRIVER={{SQL Server}};SERVER={server}\\{instance};Trusted_Connection=yes;"
conn = pyodbc.connect(conn_str, timeout=5)
cursor = conn.cursor()
cursor.execute("SELECT @@version")
version = cursor.fetchone()[0]
print(f"✅ 连接到 {server}\\{instance}")
print(f" SQL Server版本: {version.split('\\n')[0]}")
connected = True
conn.close()
break
except Exception as e:
print(f"❌ 无法连接到 {server}\\{instance}: {e}")
if not connected:
print("⚠️ 未找到可用的SQL Server实例")
print(" 请安装SQL Server或检查服务状态")
return connected
except ImportError:
print("❌ pyodbc未安装")
return False
def test_mdf_export_module():
"""测试MDF导出模块"""
print("\n🧪 测试MDF导出模块...")
try:
from utils.database_exporter import (
export_mssql_mdf_to_excel,
export_mssql_mdf_to_csv,
export_mssql_mdf_to_json
)
print("✅ MDF导出模块导入成功")
# 检查函数是否存在
functions = [
export_mssql_mdf_to_excel,
export_mssql_mdf_to_csv,
export_mssql_mdf_to_json
]
for func in functions:
print(f"{func.__name__} 函数可用")
return True
except Exception as e:
print(f"❌ MDF导出模块测试失败: {e}")
return False
def create_sample_mdf_info():
"""创建示例MDF文件信息"""
print("\n📋 示例MDF文件信息:")
sample_info = """
💡 要测试MDF文件导出功能您需要
1. **现有的.mdf文件**
- 从现有SQL Server数据库分离的.mdf文件
- 或使用SQL Server创建测试数据库
2. **SQL Server实例**
- 本地安装的SQL Server
- 或可访问的远程SQL Server
3. **连接权限**
- 数据库读取权限
- 附加数据库权限
🔧 创建测试MDF文件的步骤
1. 在SQL Server Management Studio中
```sql
-- 创建测试数据库
CREATE DATABASE TestMDFExport;
GO
-- 创建测试表
USE TestMDFExport;
CREATE TABLE Students (
ID INT PRIMARY KEY,
Name NVARCHAR(50),
Age INT,
Major NVARCHAR(50)
);
-- 插入测试数据
INSERT INTO Students VALUES
(1, '张三', 20, '计算机科学'),
(2, '李四', 21, '数据科学'),
(3, '王五', 19, '人工智能');
```
2. 分离数据库获取.mdf文件
```sql
-- 分离数据库
USE master;
GO
EXEC sp_detach_db 'TestMDFExport', 'true';
```
3. 数据库文件位置
- 默认路径: C:\\Program Files\\Microsoft SQL Server\\...\\DATA\\
- 文件: TestMDFExport.mdf TestMDFExport_log.ldf
"""
print(sample_info)
def check_odbc_drivers():
"""检查可用的ODBC驱动程序"""
print("\n🔌 检查ODBC驱动程序...")
try:
import pyodbc
drivers = pyodbc.drivers()
if drivers:
print("✅ 找到以下ODBC驱动程序:")
for driver in drivers:
print(f" - {driver}")
# 检查SQL Server相关驱动
sql_drivers = [d for d in drivers if 'SQL Server' in d]
if sql_drivers:
print("\n✅ 找到SQL Server ODBC驱动程序")
else:
print("\n⚠️ 未找到SQL Server ODBC驱动程序")
print(" 请安装ODBC Driver for SQL Server")
else:
print("❌ 未找到ODBC驱动程序")
except Exception as e:
print(f"❌ 检查ODBC驱动程序失败: {e}")
def main():
"""主测试函数"""
print("=" * 60)
print("MDF文件导出功能测试")
print("=" * 60)
# 检查ODBC驱动
check_odbc_drivers()
# 检查SQL Server连接
sql_connected = check_sql_server_connection()
# 测试MDF导出模块
module_ok = test_mdf_export_module()
# 显示示例信息
create_sample_mdf_info()
print("\n" + "=" * 60)
print("测试总结")
print("=" * 60)
if sql_connected and module_ok:
print("✅ MDF导出功能配置正确")
print("💡 您可以上传.mdf文件测试导出功能")
else:
print("⚠️ MDF导出功能需要额外配置")
if not sql_connected:
print(" - 需要安装或配置SQL Server")
if not module_ok:
print(" - 需要检查模块依赖")
print("\n🚀 下一步操作:")
print("1. 确保SQL Server服务运行")
print("2. 准备.mdf测试文件")
print("3. 访问应用测试导出功能")
print("4. 参考SQL_SERVER_SETUP.md获取详细配置说明")
if __name__ == "__main__":
main()