Оператор загрузки Python MySQL соединитель поиска в неправильном каталоге Windows - PullRequest
0 голосов
/ 23 декабря 2018

Использование кода:

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 выдает вышеуказанную ошибку.

1 Ответ

0 голосов
/ 26 декабря 2018

Почему ваш путь к файлу начинается с C:\xampp\mysql\data\?

Эта проблема связана с вашим secure_file_priv.Например, мой my.ini равен

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

Так что я могу загрузить только CSV, который находится под D:\MySQL\datas.Но вы можете установить 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);"""
...