#!/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()