自动化执行 SQL 脚本解决方案
自动化执行 SQL 脚本解决方案
手动登录多个库和数据源执行 SQL 脚本非常繁琐,以下是解决此问题的几种自动化方案。
目标:让 SQL 脚本自动化执行
方案 1:使用 Python 脚本连接并执行 SQL
Python 可以通过数据库连接库(如 pyodbc
或 pymysql
)来自动化连接和执行 SQL 脚本。
Python 自动执行 SQL 脚本
import pyodbc
import time
# 数据库连接配置
DATABASES = [
{"name": "Database1", "dsn": "DSN1", "username": "user1", "password": "pass1"},
{"name": "Database2", "dsn": "DSN2", "username": "user2", "password": "pass2"},
# 按需添加更多数据库
]
# SQL 脚本文件路径
SQL_FILE_PATH = "upgrade_script.sql"
def execute_sql_script(connection, sql_file_path):
with open(sql_file_path, "r") as file:
sql_script = file.read()
cursor = connection.cursor()
for statement in sql_script.split(";"): # 按分号拆分 SQL 语句
if statement.strip():
print(f"Executing: {statement.strip()[:50]}...")
cursor.execute(statement)
connection.commit()
def main():
for db in DATABASES:
try:
print(f"Connecting to {db['name']}...")
connection = pyodbc.connect(
f"DSN={db['dsn']};UID={db['username']};PWD={db['password']}"
)
execute_sql_script(connection, SQL_FILE_PATH)
print(f"Finished executing script on {db['name']}.")
except Exception as e:
print(f"Error on {db['name']}: {e}")
finally:
if connection:
connection.close()
print("All databases updated successfully!")
if __name__ == "__main__":
start_time = time.time()
main()
print(f"Execution completed in {time.time() - start_time:.2f} seconds.")
配置说明
- 数据库连接:
DSN
是数据库的 ODBC 数据源名称。如果未配置 DSN,可以直接用host
和port
替代。- 替换
username
和password
为对应的凭据。
- SQL 脚本路径:
- 将升级的 SQL 脚本保存为
upgrade_script.sql
文件。
- 将升级的 SQL 脚本保存为
- 数据库类型支持:
- 针对不同数据库(如 MySQL、PostgreSQL、SQL Server),使用合适的 Python 库:
- MySQL: 使用
pymysql
或mysql-connector-python
。 - PostgreSQL: 使用
psycopg2
。 - SQL Server: 使用
pyodbc
。
- MySQL: 使用
- 针对不同数据库(如 MySQL、PostgreSQL、SQL Server),使用合适的 Python 库:
方案 2:批量执行 SQL 脚本(Shell 或批处理)
如果 Python 不是首选,可以使用 Shell 或批处理文件实现。
示例:使用 mysql
命令行工具
#!/bin/bash
# 数据库配置
DATABASES=(
"Database1 -uuser1 -ppass1"
"Database2 -uuser2 -ppass2"
)
# SQL 脚本路径
SQL_FILE="upgrade_script.sql"
# 遍历所有数据库并执行脚本
for db in "${DATABASES[@]}"; do
echo "Executing script on $db..."
mysql $db < $SQL_FILE
done
echo "All databases updated successfully!"
方案 3:数据库管理工具的自动化支持
许多数据库管理工具(如 Navicat、DBeaver、DataGrip)支持批量运行 SQL 脚本,具体操作如下:
- 将所有数据库连接添加到工具中。
- 打开 SQL 脚本窗口。
- 配置脚本运行顺序,一次性执行。
方案 4:分布式数据库管理工具
如果项目需求频繁升级,可以考虑引入分布式数据库管理工具,比如:
- Flyway(数据库迁移工具)
- Liquibase(版本控制和变更管理)
- 这些工具可以让 SQL 脚本的执行更加标准化、版本化和自动化。
最终效果
通过上述方案,您可以实现以下目标:
- 节约时间:减少手动登录和执行的频率。
- 减少出错:避免重复手动输入可能带来的操作错误。
- 提升效率:从 40 分钟缩短到几分钟即可完成。