[英]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服務器。
然后,在命令行中執行命令以從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.