我有一个没有标题的CSV文件,我正在尝试从文件中的某些列创建一个SQL表。我尝试了这里给出的解决方案:Importing a CSV file into a sqlite3 database table using Python, 但不断得到col1未定义的错误。然后我尝试在我的CSV文件中插入标题,但仍然遇到KeyError。
任何帮助表示赞赏! (我根本不熟悉SQL)
答案 0 :(得分:1)
如果.csv文件没有标题,则不想使用DictReader; DictReader假定第1行是一组标题,并将它们用作每个后续行的键。这可能是你获得KeyError
的原因。
该链接示例的修改版本:
import csv, sqlite3
con = sqlite3.connect(":memory:")
cur = con.cursor()
cur.execute("CREATE TABLE t (col1, col2);")
with open('data.csv','rb') as fin:
dr = csv.reader(fin)
dicts = ({'col1': line[0], 'col2': line[1]} for line in dr)
to_db = ((i['col1'], i['col2']) for i in dicts)
cur.executemany("INSERT INTO t (col1, col2) VALUES (?, ?);", to_db)
con.commit()
答案 1 :(得分:0)
以下代码将从路径中读取所有csv文件,并将所有数据加载到sqllite 3数据库中的表中。
import sqllite3
import io
import os.path
import glob
cnx = sqlite3.connect(user='user', host='localhost', password='password',
database='dbname')
cursor=cnx.cursor(buffered= True);
path ='path/*/csv'
for files in glob.glob(path + "/*.csv"):
add_csv_file="""LOAD DATA LOCAL INFILE '%s' INTO TABLE tabkename FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n' IGNORE 1 LINES;;;""" %(files)
print ("add_csv_file: %s" % files)
cursor.execute(add_csv_file)
cnx.commit()
cursor.close();
cnx.close();
让我知道这是否有效。