如何在Python .py文件中执行MySQL Shell代码快速导入CSV到MySQL
解决方法
核心思路
通过Python内置的subprocess模块直接调用本地安装的mysqlsh.exe,利用MySQL Shell的命令行参数执行指定的JS导入脚本即可。
推荐代码示例
import subprocess # 配置项,请根据实际情况修改 MYSQLSH_PATH = r"C:\Program Files\MySQL\MySQL Shell 8.0\bin\mysqlsh.exe" # 数据库连接信息,替换为自己的用户名、密码、主机地址 DB_CONN = "your_username:your_password@localhost" # 要执行的导入JS命令 IMPORT_SCRIPT = ''' util.importTable("/usr/local/mysql/mysql-files/load_data.csv", { schema: "parallel", table: "parallel_load", columns: ["user_id","visible","name","size","latitude","longitude","timestamp","public","description","inserted"], dialect: "csv-unix", skipRows: 0, showProgress: true, fieldsOptionallyEnclosed: true, fieldsTerminatedBy: ",", linesTerminatedBy: "\\n", fieldsEnclosedBy: '"', threads: 8, bytesPerChunk: "1G", maxRate: "2G" }) ''' # 组装命令列表(无需开启shell=True,安全性更高) command = [ MYSQLSH_PATH, DB_CONN, "--js", "-e", IMPORT_SCRIPT ] # 执行命令并捕获输出 try: result = subprocess.run( command, check=True, capture_output=True, text=True, encoding='utf-8' ) print("导入执行成功,输出如下:") print(result.stdout) except subprocess.CalledProcessError as e: print("导入执行失败,错误信息:") print(e.stderr)
注意事项
- 路径处理:如果CSV文件存放在Windows本地,需要替换为实际的Windows路径,如
C:/mysql_files/load_data.csv,避免路径识别错误。 - 安全优化:如果不想将数据库明文密码写在连接串中,可以删除连接串里的密码字段,改为添加
--password参数交互式输入,或者通过MySQL配置登录路径的方式存储认证信息。 - 转义处理:脚本中的特殊字符如换行符、双引号需要做好转义,避免命令解析失败。
内容的提问来源于stack exchange,提问作者Harold James
相关产品推荐
相关产品推荐

