簡體   English   中英

RDS MySQL LOAD DATA LOCAL INFILE。 錯誤1148。此MySQL版本不允許使用命令

[英]RDS MySQL LOAD DATA LOCAL INFILE. Error 1148. The used command is not allowed with this MySQL version

我正在嘗試使用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)運行的已知錯誤。

謝謝

好的-我找到了答案。

似乎連接選項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))

從MySQL Workbench運行命令時遇到同樣的問題。

默認情況下,對於在RDS實例中運行的任何MySQL服務器,此選項設置為1。

也可以使用以下命令從MySQL Workbench進行設置:

 SET GLOBAL local_infile = 1; 

無論如何,很高興您能夠在Python中以編程方式執行此操作。

但是,由於最新版本的錯誤,設置此選項后無法從MySQL Workbench加載數據。

如何從MySql工作台而不是cmd解決錯誤1148?

一種解決方法是從命令行通過傳遞主機名,用戶名和密碼來連接到MySQL服務器。

從命令行連接到服務器

然后,在命令行中執行命令以從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' 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM