У меня есть несколько 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?
Одной из проблем является строковый литерал, содержащий текст 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)
% (file)
не является частью строкового литерала, это некоторый синтаксис Python для вычисления переменной и вставки в строку, похожую на функцию sprintf
в C (или perl или bash). (Не отправляйте %s
в MySQL. MySQL не знает, что с этим делать. Отправьте MySQL действительное имя файла ... INFILE '/mydir/myfile.txt' INTO ...
OS error code 64: Machine is not on the network