如何在Python的insert语句中编写VALUES语句?

2024-09-27 23:15:52 发布

您现在位置:Python中文网/ 问答频道 /正文

脚本,我从csv文件读取并迭代csv文件中的所有行,但我需要帮助生成每行的insert语句,并将其输出到文件中。所以我唯一的问题是每行的generate-insert语句。谢谢你的帮助

这是我的密码:

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 "
values = []
for row in csvFile:
     #this line below
     values.append('(' + ','.join(map(lambda x: '"%s"' % x, row)) + ')')
     data = insert + ("".join(values))
print(data)
createOnFile = open("data.txt","w+")
createOnFile.write(data)
createOnFile.close()
openFile.close()

Tags: 文件csvcsvfilelambdamapdata语句open
2条回答

您可以执行以下操作:

("insert into myTable(col1, col2) values(?,?)", [value1, value2])

因此,在每一行中,您将从cdv行提取数据,并将值插入表中

似乎您要做的是从源CSV读取数据,然后将相应的INSERTSQL语句写入文件,以便您可以将其直接传递给DBMS

您的代码当前存在的一些问题是:

  • 使用values.append将建立CSV每一行的值,因此插入的每个元组也将包含以前的所有元组数据,而这不是您想要的
  • 您需要在每次迭代中写入输出文件;当前代码似乎只写CSV文件的最后一行(或者问题中的缩进是错误的)
  • 假设问题中的缩进是错误的,您不想打开&;每次关闭文件时,只需在开始时打开一次文件&;最后把它关上
  • 输出行应该包含一个尾随的;来终止每个SQL语句
  • 为了便于阅读,输出行还应包含换行符

解决上述问题后,您的代码大致如下所示:

import csv

openFile = open('data.csv', 'r')
csvFile = csv.reader(openFile)

headers = [f'"{x}"' for x in next(csvFile)]
insert = f'INSERT INTO my_table ({", ".join(headers)}) VALUES '

createOnFile = open('data.txt', 'w+')

for row in csvFile:
    values = ', '.join([f'"{x}"' for x in row])
    data = insert + ''.join(f'({values});\n')
    createOnFile.write(data)

createOnFile.close()
openFile.close()

注意,我还修改了代码以使用f-strings而不是字符串串联&;还将map的用法改为list comprehensions,在本例中更简洁

相关问题 更多 >

    热门问题