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
相关产品推荐
相关产品推荐

