213 lines
5.8 KiB
Python
213 lines
5.8 KiB
Python
|
|
#!/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()
|