添加ORDER BY后触发psycopg2类型不匹配错误,搜索功能失效求助
问题解决:psycopg2 数据类型不匹配错误
报错信息:
psycopg2.errors.DatatypeMismatch: AND的参数必须为boolean类型,而非character varying,错误指向第5行的ORDER BY bk_title。原本搜索过滤器可正常展示匹配结果,添加ORDER BY bk_title语句后搜索功能失效并抛出该错误。
错误原因
- 初始SQL包含
WHERE NOT bk_delete_ind与ORDER BY bk_title - 存在搜索关键词时,直接在SQL末尾拼接
AND bk_title ILIKE %s,导致SQL语法完全错误:AND条件被错误放在了ORDER BY子句之后,数据库解析时将这个位置的AND当成ORDER BY的一部分,从而触发数据类型不匹配的报错。
解决方案
- 必须将搜索条件拼接到
WHERE子句的末尾,而非整个SQL语句的末尾,再统一添加ORDER BY子句。 - 修正后的SQL结构示例:
SELECT * FROM books WHERE NOT bk_delete_ind AND bk_title ILIKE %s ORDER BY bk_title
- 代码逻辑示例(伪代码):
sql = "SELECT * FROM books WHERE NOT bk_delete_ind" params = [] if search_keyword: sql += " AND bk_title ILIKE %s" params.append(f"%{search_keyword}%") sql += " ORDER BY bk_title" # 后续执行sql和params
内容的提问来源于stack exchange,提问作者BroLee
相关产品推荐
相关产品推荐

