sqlalchemy使用原始sql-like运算符时出现编程错误

0pizxfdo  于 2021-07-26  发布在  Java
关注(0)|答案(1)|浏览(335)

这个问题在这里已经有了答案

cs50:like运算符,变量替换和%展开(1个答案)
11个月前关门了。
我试图在flask应用程序中运行sql查询来搜索数据库。但是,运行查询时出现错误: db.execute("SELECT * FROM books WHERE author LIKE '%:author%' ", {"author":query}) 结果错误如下(在我的输入中传递了'tom':

sqlalchemy.exc.ProgrammingError: (psycopg2.errors.SyntaxError) syntax error at or near "Tom"
LINE 1: SELECT * FROM books WHERE author LIKE '%'Tom'%' 
                                                 ^

[SQL: SELECT * FROM books WHERE author LIKE '%%%(author)s%%' ]
[parameters: {'author': 'Tom'}]
(Background on this error at: http://sqlalche.me/e/f405)

我用一个硬编码的值测试了这个查询,结果很好。我想知道是什么导致了错误,以及如何修复它。

bq9c1y66

bq9c1y661#

需要字符串串联。许多sql数据库支持 concat() (和其他具有等价函数或运算符的,如标准运算符 || ):

db.execute("SELECT * FROM books WHERE author LIKE CONCAT('%', :author, '%')", {"author":query})

另一种选择是连接 '%' 首先在应用程序中围绕参数,然后将其传递给查询。

相关问题