用Python将文本文件导入sqlite,带两个参数

0 投票
1 回答
865 浏览
提问于 2025-04-17 15:43

我想把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 列了。

撰写回答