RDS MySQL LOAD DATA LOCAL INFILE。错误1148。此MySQL版本不允许使用命令

时间:2019-01-29 15:38:57

标签: python mysql mysql-workbench sqlyog

我正在尝试使用Python pyodbc以编程方式将数据导入Amazon RDS MySQL 8.0.13实例。

当我通过SQLYog运行以下代码时,它运行完美。

LOAD DATA LOCAL INFILE 'D:/path/to/my/files/myfile.csv' IGNORE INTO TABLE my_table
FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n'

但是,当我使用MySQL Workbench或通过Python在同一台计算机上运行它时,出现错误:

  

错误1148。此MySQL版本不允许使用命令

我猜这与我的连接字符串或ODBC驱动程序有关。

有人可以告诉我此命令在通过一个客户端(SQLYog)可以通过另一个客户端(MySQL Workbench / Python)正常工作的地方是否存在任何已知错误。

谢谢

2 个答案:

答案 0 :(得分:0)

好的-我找到了答案。

似乎连接选项local_infile = 1仅适用于Python中的某些连接。

我仍然找不到如何为MySQL Workbench或pyodbc启用local_infile = 1的方法,但是模块pymysql允许该选项。

import pymysql
try:
    my_conn = pymysql.connect(
        host='myserver',
        port=3306,
        db='mydatabase',
        user='myuser',
        password='somethingsecret',
        local_infile=1
    )

    my_cursor = my_conn.cursor()
    my_cursor.execute("LOAD DATA LOCAL INFILE 'D:/path/to/my/files/myfile.csv' IGNORE INTO TABLE my_table FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\\r\\n")
    my_conn.commit()

except pymysql.Error as msg:
    exit(print(msg))

答案 1 :(得分:0)

从MySQL Workbench运行命令时遇到同样的问题。

默认情况下,对于在RDS实例中运行的任何MySQL服务器,此选项都设置为1。

也可以使用以下命令从MySQL Workbench进行设置:

SET GLOBAL local_infile = 1;

无论如何,很高兴您能够使用Python以编程方式执行此操作。

但是,由于最新版本的错误,设置此选项后无法从MySQL Workbench加载数据。

How to solve Error 1148 from MySql workbench and not cmd?

一种解决方法是从命令行通过传递主机名,用户名和密码来连接到MySQL服务器。

Connect to server from command line

然后,在命令行中执行命令以从MySQL客户端加载文件。

LOAD DATA LOCAL INFILE 'D:/path/to/my/files/myfile.csv' IGNORE INTO TABLE my_table
FIELDS TERMINATED BY '|' OPTIONALLY ENCLOSED BY '"' 
LINES TERMINATED BY '\r\n'