nex_docus/backend/scripts/init_db_pymysql.py

95 lines
2.9 KiB
Python
Raw Permalink Normal View History

2025-12-20 11:18:59 +00:00
"""
使用 Python 执行数据库初始化脚本
"""
import pymysql
import sys
from pathlib import Path
# 数据库配置
DB_CONFIG = {
'host': '10.100.51.51',
'port': 3306,
'user': 'root',
'password': 'Unis@123',
'charset': 'utf8mb4',
}
def execute_sql_file(sql_file_path):
"""执行 SQL 文件"""
try:
# 读取 SQL 文件
with open(sql_file_path, 'r', encoding='utf-8') as f:
sql_content = f.read()
# 连接数据库
print("正在连接数据库...")
connection = pymysql.connect(**DB_CONFIG)
try:
with connection.cursor() as cursor:
# 分割SQL语句简单分割按分号
statements = []
current_statement = []
for line in sql_content.split('\n'):
# 跳过注释
line = line.strip()
if line.startswith('--') or not line:
continue
current_statement.append(line)
# 如果行以分号结尾,表示一条完整的语句
if line.endswith(';'):
statement = ' '.join(current_statement)
if statement.strip():
statements.append(statement)
current_statement = []
# 执行所有语句
print(f"{len(statements)} 条SQL语句...")
for i, statement in enumerate(statements, 1):
try:
cursor.execute(statement)
# 如果是SELECT语句获取结果
if statement.strip().upper().startswith('SELECT'):
result = cursor.fetchall()
if result:
print(f" [{i}] {result}")
else:
print(f" [{i}] 执行成功")
except Exception as e:
print(f" [{i}] 执行失败: {e}")
print(f" SQL: {statement[:100]}...")
# 提交事务
connection.commit()
print("\n✅ 数据库初始化完成!")
finally:
connection.close()
except FileNotFoundError:
print(f"❌ SQL 文件不存在: {sql_file_path}")
sys.exit(1)
except pymysql.Error as e:
print(f"❌ 数据库错误: {e}")
sys.exit(1)
except Exception as e:
print(f"❌ 未知错误: {e}")
sys.exit(1)
if __name__ == "__main__":
script_dir = Path(__file__).parent
sql_file = script_dir / "init_database.sql"
print("=" * 60)
print("NEX Docus 数据库初始化")
print("=" * 60)
print(f"SQL 文件: {sql_file}")
print(f"数据库地址: {DB_CONFIG['host']}:{DB_CONFIG['port']}")
print("=" * 60)
print()
execute_sql_file(sql_file)