Отсутствует имя объекта или столбца при попытке загрузить текстовый файл в таблицу SQL - PullRequest
0 голосов
/ 24 января 2019

Я пытаюсь импортировать текстовый файл данных в таблицу sql, используя скрипт python. Проблема в том, что когда я запускаю скрипт, он выдает ошибку, что отсутствует имя объекта или столбца. и что я должен проверить, что у каждого столбца в моем запросе есть имя. Теперь я в некотором роде заблудился, что это значит, потому что я уже создал таблицу в БД и у нее есть имена столбцов. Пожалуйста, объясните мне, как обойти эту ошибку.

Я не могу поделиться данными, которые пытаюсь загрузить, потому что они содержат конфиденциальную информацию. Надеюсь, мой код будет достаточно, следующий код:

with open(DEST_SRV_PTH) as infile:
for line in infile:
    data = line.split(",")
    query = ('insert into iru_temp_abd (sr_num,msisdn,notes) values (?%s,?%s,?%s)' % (str(fields[2:3]),str(fields[11:12]),str(fields[14:15])))
    cursor.execute(query, *data)
cnxn.commit()

Ответы [ 2 ]

0 голосов
/ 24 января 2019

Использование форматирования строк для вставки данных в предложение VALUES оператора INSERT является опасной практикой, поскольку оставляет ваш код открытым для уязвимостей внедрения SQL. Вы должны использовать правильный параметризованный запрос , например,

sql = 'insert into iru_temp_abd (sr_num,msisdn,notes) values (?,?,?)'
params = (str(fields[2:3]),str(fields[11:12]),str(fields[14:15]))
crsr.execute(sql, params)

или, если data действительно содержит значения столбца, просто используйте

crsr.execute(sql, data)
0 голосов
/ 24 января 2019

Я думаю, у вас есть 2 вопроса:

  1. fields, вероятно, список и не имеет значений в выбранных позициях. Попробуйте напечатать fields[2:3], и он вернет пустой список. Вы должны решить это в первую очередь.

  2. в запросе переменной есть ошибка, она должна быть:

    query = ('insert into iru_temp_abd (sr_num,msisdn,notes) values (%s,%s,%s)' % (str(fields[2:3]),str(fields[11:12]),str(fields[14:15])))

...