mysql-connector-python 读取sql文件创建表
时间: 2025-08-16 13:53:01 浏览: 0
### 使用 `mysql-connector-python` 读取 SQL 文件创建表
为了利用 `mysql-connector-python` 来通过读取外部 SQL 文件的方式创建数据库表,可以按照如下方式实现。此方法允许将复杂的 SQL 脚本保存在一个单独的 `.sql` 文件中,并由程序加载和执行这些脚本。
以下是完整的解决方案:
#### 实现方案
首先需要确保已正确设置与目标数据库之间的连接[^1]。之后打开包含所需 SQL 命令的文件,逐行解析其中的内容并将每一条独立的指令提交给 MySQL 数据库引擎去运行。
下面是一个实际的例子展示如何操作这一流程:
```python
import mysql.connector
from mysql.connector import Error
def read_sql_file(filename):
"""Read the contents of an .sql file."""
with open(filename, 'r') as f:
sql_file = f.read()
# Splitting commands by semicolon followed by newline or end-of-file.
return [cmd.strip() for cmd in sql_file.split(';') if cmd.strip()]
def create_tables_from_sql(connection, filename):
"""
Execute all SQL statements found within given .sql file against provided DB connection.
Args:
connection(mysql.connector.connection.MySQLConnection): Active database session.
filename(str): Path to input script containing DDL/DML instructions.
Returns:
None
"""
try:
cursor = connection.cursor(buffered=True)
queries = read_sql_file(filename)
for query in queries:
if query: # Ignore empty strings resulting from trailing semi-colons etc.
print(f"Executing Query:\n{query}")
cursor.execute(query)
connection.commit()
print("All tables have been successfully created.")
except Error as e:
print(e)
finally:
if (connection.is_connected()):
cursor.close()
if __name__ == '__main__':
conn_params = {
"host": "localhost",
"database": "test_db",
"user": "root",
"password": "your_password"
}
try:
my_conn = mysql.connector.connect(**conn_params)
if my_conn.is_connected():
print("<mysql.connector.connection.MySQLConnection object>", type(my_conn))
sql_script_path = './create_tables.sql'
create_tables_from_sql(my_conn, sql_script_path)
except Error as ex:
print(ex)
finally:
if 'my_conn' in locals() and my_conn.is_connected():
my_conn.close()
```
在此代码片段中完成了以下功能:
- 定义了一个辅助函数用来读取整个 SQL 文件并分割成多个单个查询语句列表。
- 主要逻辑封装进了另一个名为 `create_tables_from_sql()` 的函数里面,它接收现有的数据库链接以及指向输入脚本路径作为参数。
- 在主程序块里设置了必要的连接配置字典,并尝试建立到本地主机上的测试数据库实例的安全通道。
- 如果成功,则调用先前定义的方法传入相应的 SQL 文档位置以启动批量构建过程。
- 不管最终状态怎样都会安全释放资源以防止泄露问题发生[^2]^。
---
### 注意事项
在设计此类自动化部署工具时需要注意几个要点:
- **安全性**:避免硬编码敏感信息如密码等直接暴露在外;考虑采用环境变量或其他更安全的方式来管理凭证。
- **兼容性**:确认所使用的 SQL 方言版本匹配目标 RDBMS 平台的要求。
- **错误恢复策略**:对于可能发生的异常情况要有合理的应对计划,比如记录日志或者提供重试机会等功能增强用户体验[^3].
阅读全文
相关推荐




















