![](/img/trans.png)
[英]Importing a CSV file into a sqlite3 database table using Python
[英]Importing a file to SQLite3 using python
我知道这个问题已经问了好几次了,但是我似乎无法获得所描述的任何一种工作方式。
我正在尝试将文件导入数据库,该文件具有由逗号(即csv)分隔的数据列。 我已经制作了一个类似于我想读取的actula文件的测试文件,所以这里是内容。
Wind_Speed, Wind_Direction, Wind_Max
10, 360, 12
13, 320, 11
12, 340, 14
12, 360, 14
这是我已经在做的事情。
#!/usr/bin/python3.3
import csv, sqlite3
con = sqlite3.connect('test.db')
cur = con.cursor()
with open('test.dat', newline='') as f:
reader = csv.reader(f)
for column in reader:
cur.execute('INSERT INTO jaws VALUES {}'.format(column))
con.commit()
这是错误消息,
Traceback (most recent call last):
File "csvdict.py", line 11, in <module>
cur.execute('INSERT INTO jaws VALUES {}'.format(column))
sqlite3.OperationalError: near "['Wind_Speed', ' Wind_Direction', ' Wind_Max']": syntax error
我确定我很愚蠢,缺少明显的东西,但我看不到。
谢谢
您没有正确格式化数据。
首先,您的错误消息是说您插入了我假定的列名。
其次,您应注意如何插入sql 。
#!/usr/bin/python3.3
import csv, sqlite3
con = sqlite3.connect('test.db')
cur = con.cursor()
with open('test.dat', 'r') as f:
reader = csv.reader(f)
reader.next() # skip the headers
for column in reader:
cur.execute('INSERT INTO jaws VALUES (?,?,?)',tuple(i for i in column))
con.commit()
对于像您的示例这样的小文件,可以在输入末尾提交更改,但是对于较大的文件,您可能需要考虑更频繁地执行此操作。 因为过去,我遇到了一些问题。
编辑:
为了回应您评论中提到的异常,这是跳过第一行的另一种方法:
#!/usr/bin/python3.3
import csv, sqlite3
con = sqlite3.connect('test.db')
cur = con.cursor()
with open('test.dat', 'r') as f:
reader = csv.reader(f)
first = True
for column in reader:
if first:
first = False
continue
cur.execute('INSERT INTO jaws VALUES (?,?,?)',tuple(i for i in column))
con.commit()
EDIT2:
为了回应您评论中提到的异常,这是跳过第一行的另一种方法:
#!/usr/bin/python3.3
import csv, sqlite3
con = sqlite3.connect('test.db')
cur = con.cursor()
with open('test.dat', 'r') as f:
reader = csv.reader(f)
skip_n = 4 # skips 4 lines
skip_i = 0
for column in reader:
if skip_i < skip_n:
skip_i += 1
continue
cur.execute('INSERT INTO jaws VALUES (?,?,?)',tuple(i for i in column))
con.commit()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.