2016-09-28 4 views
1

Как бы я сделал следующее?Как выполнить команду LOAD DATA изнутри python

import MySQLdb 
conn = MySQLdb.connect (
        host = settings.DATABASES['default']['HOST'], 
        port = 3306, 
        user = settings.DATABASES['default']['USER'], 
        passwd = settings.DATABASES['default']['PASSWORD'], 
        db = settings.DATABASES['default']['NAME'], 
        charset='utf8') 
cursor = conn.cursor()  
cursor.execute('SELECT COUNT(*) FROM auth_user') 
print cursor.fetchall() # this prints, so I know the connection is correct 

cursor.execute(''' 
    LOAD DATA INFILE 'a_short.csv' INTO TABLE export 
    FIELDS TERMINATED BY '|' ENCLOSED BY '"' 
    LINES TERMINATED BY '\r\n' 
    IGNORE 1 LINES; 
    ''') 

Когда я пытаюсь выше я получаю ошибку «Отказано в доступе» ошибка, но я думаю, что это больше связано с попытками сделать команду LOAD DATA внутри курсора. Каким будет правильный способ сделать это?

Обновление: Это, по-видимому, ограничение привилегий (отсутствие привилегий «файла») для пользователя в Amazon RDS. Вот один из способов обойти это: how to 'load data infile' on amazon RDS?.

+1

Я действительно не думаю, что это ошибка курсора, ваш пользователь, вероятно, просто не имеет необходимых разрешений – hiperbolt

+0

@HiperBolt, который кажется правильным. – David542

+0

Должен ли я сделать ответ? Я, пожалуйста, проверьте его как правильно <3 – hiperbolt

ответ

2

Для того чтобы load file нуждался в вашей учетной записи для базы данных MySQL file_priv. В базе данных также должны быть разрешения на чтение для данного файла.

В этом запросе базе данных дается указание найти a_short.csv в файловой системе базы данных, которая, вероятно, приведет к следующему пути: /var/mysql/a_short.csv. Если этот файл csv находится на стороне python системы, тогда python должен открыть файл и заполнить базу данных MySQL.

1

Это не похоже на проблему с курсором, но все же кажется, что пользователь, которого вы используете, не имеет необходимых разрешений для выполнения указанной команды.

Убедитесь, что вы предоставите пользователю необходимые разрешения.

Смежные вопросы