2017-01-21 35 views
1

我想导入一个制表符分隔文件('pageviews')到sqlite('empty_db.sqite'),但继续得到错误消息'OperationalError:near“ )“:语法错误”。下面是代码我迄今:导入选项卡分隔文件到sqlite - OperationalError近“)”

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

你可以发布堆栈跟踪吗?如果错误来自循环中的执行,你能打印'元组(rec)'吗? –

回答

0

你有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 
+0

谢谢 - 我的意图是将数据导入到'empty_db.sqlite'中,然后将其转换为DataFrame,但我甚至很难将它们放到sqlite数据库中。所以从这里我可以使用这条线将其转换为DataFrame? df = pd.read_sql_query(“SELECT * FROM tbl”,con) – 6114617

+0

因此,代码将其放入DataFrame中,但DataFrame第二列中的TSV文件的所有四个列的行号列在第一列。 – 6114617

+0

@6114617,请将示例输入数据集(理想情况下从您的TSV文件中的第3-5行)发布到您的问题 – MaxU

相关问题