Как генерировать операторы вставки каждой строки из csv в python?

Я создаю сценарий, в котором я читаю из 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()

Что происходит? Чем это отличается от того, что вы ожидаете? Вы получаете сообщение об ошибке или вывод только сейчас соответствует вашим ожиданиям?

Macattack 18.12.2020 20:42

Нет ошибки. Но я не вставляю каждую строку

Crazy Mike 18.12.2020 20:54

Я получаю только вывод заголовков и их значений

Crazy Mike 18.12.2020 20:55

в вашем цикле for вы перезаписываете values каждый раз, поэтому вы увидите только самую последнюю строку значений. вам, вероятно, нужно использовать список для хранения каждого values, который вы создаете

Macattack 18.12.2020 20:59

Вы можете увидеть мой код обновления, что мне не хватает?

Crazy Mike 18.12.2020 21:47
values все еще только присваивается текущей строке. каждая итерация цикла for перезаписывает предыдущую values, нигде ее не сохраняя
Macattack 18.12.2020 22:00
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
6
755
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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:]:

Crazy Mike 18.12.2020 23:06

это было изменение, поэтому я мог получить к нему доступ как к списку, а не к реальному считывателю csv, как у вас. Вы можете просто сделать то же, что и в исходном коде, и иметь for row in csvFile:, а не нарезать его, как я.

Macattack 18.12.2020 23:16

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

Macattack 18.12.2020 23:17

по какой-то причине '' + x + '') вызывают некоторую синтаксическую ошибку на сервере Microsoft sql для запуска инструкции. как вы думаете, я могу убрать тильду `` и или запятые?

Crazy Mike 18.12.2020 23:50

Похоже, вы должны переключить ` на " то, что вы пытаетесь процитировать, это «идентификаторы» - stackoverflow.com/a/2901499/1609219

Macattack 19.12.2020 00:44

Я изменил его .. однако он сказал incorrect syntax near ,, но он не показывает красную линию, где она?

Crazy Mike 20.12.2020 01:05

Другие вопросы по теме