繁体   English   中英

使用python将文件导入SQLite3

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM