导入选项卡分隔文件到sqlite - OperationalError near“)”

时间:2017-01-21 20:19:59

标签: python sqlite csv pandas dataframe

我正在尝试将制表符分隔文件('pageviews')导入sqlite('empty_db.sqite'),但继续收到错误消息'OperationalError:near“)”:语法错误'。这是我到目前为止的代码:

import sqlite3
import pandas as pd
import csv

con = sqlite3.connect('empty_db.sqlite')
con.execute('CREATE TABLE tbl(Field1 TEXT, Field2 TEXT, Field3 INTEGER, Field4 INTEGER);')

csvfile = open('pageviews', 'r', encoding = 'utf8')
csvReader = csv.reader(csvfile)
header = next(csvReader)
for rec in csvReader:
    con.execute("INSERT INTO tbl VALUES %s" %str(tuple(rec)))
csvfile.close()
con.commit()
con.close()

这是我的TSV文件的前五行:

aa Main_Page 1 0
aa.d Main_Page 1 0
aa.m Main_Page 1 0
ab 1942 1 0
ab 1990 1 0

非常感谢任何帮助 - 谢谢!

1 个答案:

答案 0 :(得分:0)

您使用pandas标记标记了您的问题,但您没有使用它...

如果您想使用pandas,它可能看起来更容易:

import sqlite3
import pandas as pd

In [288]: con = sqlite3.connect('d:/temp/empty_db.sqlite')

In [289]: fn = r'D:\temp\.data\123.csv'

In [290]: df = pd.read_csv(fn, delim_whitespace=True, header=None).add_prefix('col')

In [291]: df
Out[291]:
   col0       col1  col2  col3
0    aa  Main_Page     1     0
1  aa.d  Main_Page     1     0
2  aa.m  Main_Page     1     0
3    ab       1942     1     0
4    ab       1990     1     0

In [292]: df.to_sql('tbl', con, index=False)

SQLite的:

D:\temp>sqlite3 empty_db.sqlite
SQLite version 3.10.1 2016-01-13 21:41:56
Enter ".help" for usage hints.
sqlite> .header on
sqlite> .mode columns
sqlite> select * from tbl;
col0        col1        col2        col3
----------  ----------  ----------  ----------
aa          Main_Page   1           0
aa.d        Main_Page   1           0
aa.m        Main_Page   1           0
ab          1942        1           0
ab          1990        1           0

从SQLite回读:

In [293]: x = pd.read_sql('select * from tbl', con)

In [294]: x
Out[294]:
   col0       col1  col2  col3
0    aa  Main_Page     1     0
1  aa.d  Main_Page     1     0
2  aa.m  Main_Page     1     0
3    ab       1942     1     0
4    ab       1990     1     0