GH/test_mdf_functionality.py
AI Developer 2ec2c0a1ab feat: 完整的数据提取与转换器项目
- 添加MDF文件导出功能
- 集成阿里云OCR大模型识别
- 添加百度智能云AI照片评分
- 集成DeepSeek大模型创意文案生成
- 完善文档和配置管理
- 使用uv进行现代化依赖管理
- 添加完整的.gitignore配置
2026-01-08 20:25:49 +08:00

213 lines
5.8 KiB
Python
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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