2017-01-21 34 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

相關問題