цикл через несколько неструктурированных текстовых файлов для вставки в MySql с использованием DATA LOCAL INFILE

0

У меня есть несколько txt файлов в каталоге, и я хочу вставить их в mysql; содержимое каждого файла должно занимать строку. В MySQL у меня есть 2 столбца: ID (auto increment) и LastName (nvarchar (45)). Во-первых, я использовал вставку, и я получил ошибку, что не могу вставить слишком много строк! Затем я использовал следующий код, но он дает мне ошибку 1064. Вот код:

import MySQLdb
import sys
import os
result = os.listdir("path")
for x in result:
    db = MySQLdb.connect("localhost","root","password","myblog")
    cursor = db.cursor()
    file = os.path.join('path\\'+x)    
    cursor.execute("LOAD DATA LOCAL INFILE file INTO clamp_test(ID, LastName)");   
    file.close()          
db.commit()
db.close

Не могли бы вы рассказать мне, что я делаю неправильно? Это правильный способ вставить краткие строки неструктурированного файла в MySql?

  • 0
    OS error code 64: Machine is not on the network
  • 0
    @Sammitch; моя вина! это было 1064. Он говорит, что синтаксис не правильный, но я дважды проверил его, и он был правильным
Показать ещё 1 комментарий
Теги:
python-3.x

1 ответ

1
Лучший ответ

Одной из проблем является строковый литерал, содержащий текст SQL

 "LOAD DATA LOCAL INFILE file INTO ..."
                         ^^^^

Здесь file - это просто символы, которые являются частью литеральной строки. Это не ссылка на переменную, подлежащую оценке.

SQL-запрос, который нам нужно отправить в MySQL, должен выглядеть так:

 LOAD DATA LOCAL INFILE '/mydir/myfile.txt' INTO ...
                        ^^^^^^^^^^^^^^^^^^^

В коде похоже, что мы хотим, чтобы переменная файла была оценена, а результат оценки включен в текстовую строку SQL.

Что-то вроде этого:

 "LOAD DATA LOCAL INFILE '%s'  INTO ... " % (file)
  • 0
    Спасибо! Но я все еще получаю ту же ошибку: cursor.execute ("ЗАГРУЗИТЬ ДАННЫЙ ЛОКАЛЬНЫЙ ИНФИЛЬ '% s' INTO TABLE Clamp_test% (file1)"); и ошибка по-прежнему код 1064. @ spencer7593
  • 0
    Это код Python, не так ли? Похоже, вы пропустили двойную кавычку в конце строки. Бит % (file) не является частью строкового литерала, это некоторый синтаксис Python для вычисления переменной и вставки в строку, похожую на функцию sprintf в C (или perl или bash). (Не отправляйте %s в MySQL. MySQL не знает, что с этим делать. Отправьте MySQL действительное имя файла ... INFILE '/mydir/myfile.txt' INTO ...

Ещё вопросы

Сообщество Overcoder
Наверх
Меню