【问题标题】:Python mysql connector load statement searching in wrong directory WindowsPython mysql连接器加载语句在错误目录Windows中搜索
【发布时间】:2026-02-21 02:00:01
【问题描述】:

使用代码:

import mysql.connector
cnx = mysql.connector.connect(user='usr', password='pswd',
                              host='127.0.0.1',
                              database='db')

cursor = cnx.cursor()

cursor.execute(
    "LOAD DATA INFILE 'C:\\Users\\user\\Documents\\csvFiles\\Lamborghini-data.csv' "
    "INTO TABLE lamborghini "
    "FIELDS TERMINATED BY ',' "
    "ENCLOSED BY '\"' "
    "LINES TERMINATED BY '\\n' "
    "IGNORE 1 ROWS "
    "(model_year, make, model, model_info, price, status, auction_location, auction_year);"
)

我成功连接到数据库,但由于某种原因,加载语句会查找“C:\xampp\mysql\data...”中的文件,而不是指定的路径。

这是错误:

Traceback (most recent call last):
  File "createAndLoadDB.py", line 42, in <module>
    "LOAD DATA INFILE 'C:\\Users\\david\\Documents\\MecumProject2\\MecumScraper\\csvFiles\\Lamborghini-data.csv' "
  File "C:\Users\david\Anaconda3\envs\MecumDBEnv\lib\site-packages\mysql\connector\cursor.py", line 566, in execute
    self._handle_result(self._connection.cmd_query(stmt))
  File "C:\Users\david\Anaconda3\envs\MecumDBEnv\lib\site-packages\mysql\connector\connection.py", line 549, in cmd_query
    result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
  File "C:\Users\david\Anaconda3\envs\MecumDBEnv\lib\site-packages\mysql\connector\connection.py", line 438, in _handle_result
    raise errors.get_exception(packet)
mysql.connector.errors.DatabaseError: 29 (HY000): File 'C:\xampp\mysql\data\UsersdavidDocumentsMecumProject2MecumScrapercsvFilesLamborghini-data.csv' not found (Errcode: 2 "No such file or directory")

似乎正在从我指定的文件中删除“\\”,并在“C\xampp\mysql\data...”中搜索它。

如果语句在 .sql 文件中,我可以成功执行该语句,但是在我的 python 脚本 mysql.connector 中使用它时会引发上述错误。

【问题讨论】:

    标签: python mysql windows xampp connector


    【解决方案1】:

    为什么您的文件路径会以C:\xampp\mysql\data\ 开头?

    此问题与您的secure_file_priv 有关。比如我的my.ini

    [mysqld]
    secure_file_priv = "D:\MySQL\datas"
    

    所以我只能加载D:\MySQL\datas 下的csv。但是你可以设置secure_file_priv = ""来禁用这个选项。

    如何停止从我指定的文件中删除“\”?

    在你的字符串前面添加r,你需要继续使用\\。为什么会出现这种情况,可能是由于多次传递,字符串从Python传递到mysql。

    r"""LOAD DATA INFILE 'C:\\abc\\def.csv'
    INTO TABLE test 
    FIELDS TERMINATED BY ',' 
    ENCLOSED BY '\"'
    LINES TERMINATED BY '\n'
    IGNORE 1 ROWS
    (col);"""
    

    【讨论】: