【问题标题】:sqlite3 operationalerror exceptionsqlite3操作错误异常
【发布时间】:2019-09-17 17:40:00
【问题描述】:

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

OperationalError('near "s": 语法错误')

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

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

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

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

最后,完整代码如下:

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] +"'"))

【问题讨论】:

    标签: python database sqlite csv syntax-error


    【解决方案1】:

    如果您自己格式化查询,您还需要处理引用字符串参数。相反,您可以让 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]])
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-06-21
      • 2022-06-16
      • 1970-01-01
      • 2014-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多