SQLite3更新最新记录报错:ORDER附近语法错误求助
解决SQLite UPDATE带ORDER BY/LIMIT的语法错误问题
问题原因
你遇到的报错是因为默认版本的SQLite可能未启用SQLITE_ENABLE_UPDATE_DELETE_LIMIT编译选项,这个选项是SQLite支持在UPDATE/DELETE语句中使用ORDER BY和LIMIT的必要条件。数据库浏览器可能用了自行编译、带该选项的SQLite版本,所以能正常执行,但Python调用的系统自带SQLite库通常没开启这个选项,因此触发语法错误。
替代解决方案
换一种写法:先查询出最新的deal_id,再针对性更新这条记录,完全不需要依赖上述编译选项:
def update_sell_price(self, sell_price): with self.connection: # 获取最新的deal_id self.cursor.execute('SELECT deal_id FROM Deals ORDER BY deal_id DESC LIMIT 1') latest_deal_id = self.cursor.fetchone() if latest_deal_id: # 用参数化查询更新,避免SQL注入 self.cursor.execute( 'UPDATE Deals SET sell_price = ? WHERE deal_id = ?', (sell_price, latest_deal_id[0]) )
重要提醒
别再用f-string直接拼接SQL语句,这会引发SQL注入漏洞,而且容易出现数据类型转换错误。用代码里的?占位符做参数化查询才是安全规范的做法。
内容的提问来源于stack exchange,提问作者Сергей Викторович
相关产品推荐
相关产品推荐

