sqlite3 operationalerror异常

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了sqlite3 operationalerror异常相关的知识,希望对你有一定的参考价值。

我目前正在尝试通读csv文件,获取所述csv文件的内容,然后将它们放入sqlite3数据库。我不断得到一个

OperationalError('near“s”:语法错误')

通常我会认为这是一个简单的错误,在罪魁祸首的代码行中。

然而,有趣的是,在我们遇到此异常之前,程序会运行7行csv文件:

enter image description here

我检查csv文件中的以下行,您可以在此处看到:

enter image description here

据我所知,那里没有“异常”的价值观。

最后,这是完整的代码:

def readData(filename, sqlite_file):

conn = sqlite3.connect(sqlite_file)
c = conn.cursor()

with open(filename) as CSVfile:
    csvReader = csv.reader(CSVfile)
    headers = next(csvReader)

    for row in csvReader:
        print(row[26] + ' ' + row[15] + ' ' + row[16] + ' ' + row[21] + ' ' + row[22] + ' ' + row[23] + ' ' + row[24] + ' ' + row[17])
        tableName = 'Sponsor'
        c.execute('INSERT INTO {tn}  VALUES ({v1}, {v2}, {v3}, {v4}, {v5}, {v6}, {v7}, {v8})'.format(tn=tableName, v1=row[26], v2=str("'"+ row[15] +"'"), v3="'"+ row[16] +"'", v4="'"+ row[21] +"'", v5="'"+ row[22] +"'", v6= "'"+ row[23] +"'", v7= "'"+ row[24] +"'", v8= "'"+ row[17] +"'"))
答案

如果您自己格式化查询,则还需要处理引用字符串参数。相反,您可以让sqlite库为您完成繁重的工作并参数化您的语句。请注意,无法对参数名称进行参数化,因此您仍需要在其中格式化表名:

c.execute('INSERT INTO {tn}  VALUES (?, ?, ?, ?, ?, ?, ?, ?)'.format(tn=tableName),
          [row[26], row[15], row[16], row[21], row[22], row[23], row[24], row[17]])

以上是关于sqlite3 operationalerror异常的主要内容,如果未能解决你的问题,请参考以下文章

sqlite3.OperationalError ...我的sqlite语法有啥问题?

sqlite3.OperationalError:靠近“%”:语法错误

django:sqlite3.OperationalError:没有这样的表

sqlite3.OperationalError:表测试没有名为 python 的列错误

从给定范围中选择行时,sqlite3.OperationalError“SQL 变量太多”

sqlite3 operationalerror异常