我正在尝试创建一个Web应用程序,用户可以在其中输入他们的csv数据,然后我会将分析返回给用户。 CSV数据文件可以有各种大小和数量的字段,因此我必须能够在我的sqlite数据库中动态创建表。
到目前为止,我已经创建了一种非常粗略和hackish的创建表格的方法,但现在我只是坚持能够在表格中插入查询。我知道DictReader,我在阅读此answer之后一直试图将其合并。但是,Python脚本中的INSERT查询
with open('data.csv','rb') as fin: # `with` statement available in 2.5+
# csv.DictReader uses first line in file for column headings by default
dr = csv.DictReader(fin) # comma is default delimiter
to_db = [(i['col1'], i['col2']) for i in dr]
cur.executemany("INSERT INTO t (col1, col2) VALUES (?, ?);", to_db)
基于固定数量的字段。我找不到动态制作(col1,col2)VALUES(?,?)的方法。
以下是我迄今为止动态创建表格所做的工作。
import sqlite3, csv
conn = sqlite3.connect("test.db")
cur = conn.cursor()
csv_file = open("test.csv", "rb")
csv_reader = csv.reader(csv_file)
header = csv_reader.next()
header_str = ', '.join(str(e) for e in header)
sql = "CREATE TABLE t (%s) " % header_str
cur.execute(create_SQL_str)
我使用标题行来确定从列表中创建一个字符串。然后我创建了一个CREATE SQL查询并使用了字符串格式(我意识到参数化值带有?更好,但这不是我目前主要关心的问题。)
但是,我不认为我可以为INSERT查询执行相同类型的hackish解决方案。
我错过了一个简单的解决方案吗?我一直在寻找更好的解决方案,但无法找到解决方案。