用Python将文本文件导入sqlite,带两个参数
我想把5个配置文件(rubin1.cfg...rubin5.cfg)导入到sqlite3数据库里。配置文件其实就是一串字符串的列表。每个字符串都是从新的一行开始的。我打算把这些文件里的字符串导入到sqlite的表中,并在FileID这个字段里插入配置文件的索引。
import sqlite3, codecs
con = sqlite3.connect("ConfigImport.db")
cur = con.cursor()
n = 0
sql = """\
DROP TABLE IF EXISTS
TblRubin;
CREATE TABLE TblRubin
(StringId INTEGER PRIMARY KEY,
FileId INTEGER
String TEXT)
"""
cur.executescript(sql)
while n < 5:
n = n + 1
i = 0
path = r'C:\\t7\\config\\rubi'+ str(n) + '.cfg'
f = codecs.open(path, "r", encoding='cp1251')
str2 = codecs.open(path, "r", encoding='cp1251').readlines()
print 'File', path, 'opened. Number of strings: ', str(len(str2))
for line in f:
cur.execute('insert into tblrubin values (null, ?, ?)', n, [str2[i].rstrip()])
i = i + 1
con.commit()
cur.close()
con.close()
结果是:
File C:\\t7\\config\\rubi1.cfg opened. Number of strings: 6528
Traceback (most recent call last):
File "C:\t7\programs\analysis\ConfigImport.py", line 25, in <module>
cur.execute('insert into tblrubin values (null, ?, ?)', (n, str2[i].rstrip()))
sqlite3.OperationalError: table tblrubin has 2 columns but 3 values were supplied
当我尝试只导入一个文件,并且脚本只包含一个参数时,像这样...:
cur.execute('insert into tblrubin2 values (null, ?)', [str2[i].rstrip()])
...导入的插入操作是成功的。
你能给点建议,如何写一个正确的脚本,把文本文件用两个参数导入到sqlite数据库吗?
1 个回答
0
你需要在你的 CREATE TABLE
语句中加一个逗号:
....
FileId INTEGER , -- HERE
String TEXT
....
否则你就不会有 String
列了。