Экспорт данных из MySQL в CSV в Python - PullRequest
0 голосов
/ 04 августа 2020
import mysql.connector

sql = "SELECT r.sensorID, s.area, r.date, r.Time, r.waterLevel, r.redalert FROM sensor s INNER JOIN rainfall r ON s.sensorID = r.sensorID ORDER BY r.date, Time INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/rainDB.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';"

mycursor.execute(sql)

Я хочу выполнить приведенный выше код в моей Python IDE, чтобы экспортировать данные в файл CSV. Оператор select отлично работает в рабочей среде MySQL. Однако я продолжаю получать следующую ошибку, когда пытаюсь использовать это в Pycharm:

File "C:/Users/user/PycharmProjects/pythonProject1/BIrainSensor.py", line 106
    sql = "SELECT r.sensorID, s.area, r.date, r.Time, r.waterLevel, r.redalert FROM sensor s INNER JOIN rainfall r ON s.sensorID = r.sensorID ORDER BY r.date, Time INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/rainDB.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';"
                                                                                                                                                                                                                                                                                                                         ^
SyntaxError: unexpected character after line continuation character

Что, я думаю, из-за backsla sh n (\ n) внутри цитаты. Есть ли способ решить эту проблему, или мне просто нужно найти другой способ экспортировать данные в файл CSV.

1 Ответ

0 голосов
/ 18 августа 2020

Вам нужно добавить \ (backsla sh), чтобы избежать символов " (поскольку вы используете его для определения строки запроса) и \.

См. Python Строковые и байтовые литералы https://docs.python.org/3/reference/lexical_analysis.html#string -and-bytes-literals

Пример:

sql = "SELECT r.sensorID, s.area, r.date, r.Time, r.waterLevel, r.redalert FROM sensor s INNER JOIN rainfall r ON s.sensorID = r.sensorID ORDER BY r.date, Time INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/rainDB.csv' FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '\"' LINES TERMINATED BY '\\n'"

Или, что еще лучше, вы можете использовать строки в тройных кавычках с префиксом «r», чтобы пометить его как необработанную строку. Таким образом вы избегаете экранирования символов:

sql = r"""SELECT r.sensorID, s.area, r.date, r.Time, r.waterLevel, r.redalert
FROM sensor s
INNER JOIN rainfall r ON s.sensorID = r.sensorID
ORDER BY r.date, Time
INTO OUTFILE 'C:/ProgramData/MySQL/MySQL Server 8.0/Uploads/rainDB.csv'
FIELDS TERMINATED BY ',' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n'
"""
...