Я создаю сценарий, в котором я читаю из CSV-файла и повторяю все строки в CSV-файле, но мне нужна помощь для создания операторов вставки каждой строки, и я также вывожу это в файл. Так что моя единственная проблема - генерировать операторы вставки каждой строки. Спасибо за помощь.
вот мой код:
import csv
openFile = open('data.csv', 'r')
csvFile = csv.reader(openFile)
header = next(csvFile)
headers = map((lambda x: '`' + x + '`'), header)
insert = 'INSERT INTO my_table (' + ", ".join(headers) + ") VALUES "
l = [*range(0, 59, 1)]
for row in csvFile:
values = list(row[i] for i in l)
print(values)
data = insert + "(" + ", ".join(values) + ");"
print(data)
createOnFile = open("data.txt","w+")
createOnFile.write(data)
createOnFile.close()
openFile.close()
Нет ошибки. Но я не вставляю каждую строку
Я получаю только вывод заголовков и их значений
в вашем цикле for
вы перезаписываете values
каждый раз, поэтому вы увидите только самую последнюю строку значений. вам, вероятно, нужно использовать список для хранения каждого values
, который вы создаете
Вы можете увидеть мой код обновления, что мне не хватает?
values
все еще только присваивается текущей строке. каждая итерация цикла for перезаписывает предыдущую values
, нигде ее не сохраняя
Возьмите это как пример, с которым вы можете работать. Вам нужно сохранить каждую строку, в которой вы переформатировали значения, а затем объединить все это.
csvFile = [
['columnA', 'columnB'],
['a1', 'b1'],
['a2', 'b2'],
]
header = csvFile[0]
headers = map((lambda x: '`' + x + '`'), header)
insert = 'INSERT INTO my_table (' + ", ".join(headers) + ") VALUES "
values = []
for row in csvFile[1:]:
values.append('(' + ','.join(map(lambda x: '"%s"' % x, row)) + ')')
data = insert + ', '.join(values)
print(data)
Я получаю TypeError: '_csv.reader' object is not subscriptable
в for row in csvFile[1:]:
это было изменение, поэтому я мог получить к нему доступ как к списку, а не к реальному считывателю csv, как у вас. Вы можете просто сделать то же, что и в исходном коде, и иметь for row in csvFile:
, а не нарезать его, как я.
@CrazyMike Мой код был больше предназначен для того, чтобы быть примером того, что я имел в виду для вас, а не для прямого копирования и вставки решения.
по какой-то причине '
' + x + '')
вызывают некоторую синтаксическую ошибку на сервере Microsoft sql для запуска инструкции. как вы думаете, я могу убрать тильду `` и или запятые?
Похоже, вы должны переключить ` на "
то, что вы пытаетесь процитировать, это «идентификаторы» - stackoverflow.com/a/2901499/1609219
Я изменил его .. однако он сказал incorrect syntax near ,
, но он не показывает красную линию, где она?
Что происходит? Чем это отличается от того, что вы ожидаете? Вы получаете сообщение об ошибке или вывод только сейчас соответствует вашим ожиданиям?