如何用Python遍历指定路径文件夹并在MySQL中创建对应数据库?
代码问题分析与修正方案
原代码存在的问题
- 路径转义错误:Windows路径中的单反斜杠
\会被Python解析为转义字符,例如\StackExchange里的\S可能引发解析异常,导致路径无法正确识别。 - 变量名冲突:
os.walk循环中使用rootdir作为迭代变量,直接覆盖了外层定义的路径变量,会导致后续遍历逻辑混乱。 - SQL语法与安全风险:直接将文件夹名称拼接进SQL语句,若文件夹名包含空格、特殊字符或SQL关键字,会导致执行失败;同时存在SQL注入风险。
- 缺乏异常处理:未捕获数据库操作可能出现的异常(如数据库已存在、权限不足、名称非法),程序遇到错误会直接崩溃。
- 导入语句不规范:
import os放在代码中间,不符合Python代码结构规范。
修正后的代码
import MySQLdb import os # 使用原始字符串定义Windows路径,避免转义问题 root_dir = r'D:\StackExchange\stackexchangeparser\Output' try: # 建立数据库连接 db_conn = MySQLdb.connect(host="localhost", user="root", passwd="password") cursor = db_conn.cursor() # 遍历文件夹,更换迭代变量名避免冲突 for root, dirs, files in os.walk(root_dir): for subdir in dirs: # 用反引号包裹数据库名,兼容特殊字符;添加IF NOT EXISTS避免重复创建报错 sql = f'CREATE DATABASE IF NOT EXISTS `{subdir}`' try: cursor.execute(sql) print(f"执行成功: {sql}") except MySQLdb.Error as e: print(f"执行失败: {sql} | 错误信息: {e}") # 释放数据库资源 cursor.close() db_conn.close() except MySQLdb.Error as e: print(f"数据库连接失败 | 错误信息: {e}")
修正说明
- 调整导入语句位置,将
import os移至文件开头,符合代码规范。 - 使用原始字符串前缀
r定义路径,彻底解决转义字符问题。 - 更换
os.walk的迭代变量名(root替代rootdir),避免变量覆盖导致的逻辑错误。 - 用反引号
``包裹数据库名,兼容含特殊字符的文件夹名称;添加IF NOT EXISTS关键字,避免因数据库已存在引发的报错。 - 增加两层异常处理:外层捕获数据库连接错误,内层捕获单条SQL执行错误,保证程序遇到异常时不会直接崩溃,同时输出错误信息便于排查。
- 显式关闭游标与数据库连接,及时释放资源。
内容的提问来源于stack exchange,提问作者Marcus Pacheco
相关产品推荐
相关产品推荐

