You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python SQLite中remove与search函数执行报错求助

问题解决:SQLite中使用index作为列名导致的语法错误

错误原因

index是SQLite的保留关键字,直接在WHERE子句中写WHERE index = 1221时,SQL解析器会将其识别为语法关键字而非列名,从而触发syntax error。

解决方案

以下两种方式任选其一即可:

方式1:在SQL语句中包裹保留关键字列名

SQLite允许用[]或""将保留关键字作为列名引用,修改remove和search函数的SQL语句:

修改remove函数:

def remove():
    conn = sql.connect(r"C:\Users\slaye\OneDrive\Desktop\sqlite\db\z.db")
    cur = conn.cursor()
    g = ("""DELETE FROM v
    WHERE [index] = 1221;""")
    cur.execute(g)
    conn.commit()
    b = ("""SELECT * FROM v;""")
    q = cur.execute(b).fetchall()
    print(q)
    conn.close()

修改search函数:

def search():
    conn = sql.connect(r"C:\Users\slaye\OneDrive\Desktop\sqlite\db\z.db")
    cur = conn.cursor()
    x = """SELECT * FROM v WHERE "index" = 1221;"""
    h = cur.execute(x).fetchall()
    print(h)
    conn.close()

方式2:导入数据时重命名index列

在使用pandas.to_sql导入数据时,通过index_label参数给DataFrame的index指定一个非保留字列名,比如row_id:

修改导入部分代码:

conn = sql.connect(r"C:\Users\slaye\OneDrive\Desktop\sqlite\db\z.db")
cur = conn.cursor()
# 替换默认的index列名为row_id
s = sea_level_df.to_sql('v', conn, index_label='row_id')
conn.commit()  # 原代码cur.commit(s)错误,commit是连接对象的方法
conn.close()

之后修改remove和search函数的条件:

# remove函数的SQL语句
g = """DELETE FROM v WHERE row_id = 1221;"""

# search函数的SQL语句
x = """SELECT * FROM v WHERE row_id = 1221;"""

额外注意事项

  • 原代码中cur.commit(s)是错误用法,commit()是连接对象(conn)的方法,不需要传参。
  • 自定义database类中部分方法连接的是'z'(相对路径),部分用完整路径,可能导致连接到不同数据库文件,建议统一路径。

内容的提问来源于stack exchange,提问作者Bijan Khair Rahman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 12:15:49