使用原始 SQL Like 运算符时出现 SqlAlchemy 编程错误

SqlAlchemy Programming Error when using raw SQL Like operator

我正尝试在我的 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)

我用硬编码值测试了查询,它工作正常。我想知道导致错误的原因以及如何修复它。

您需要字符串连接。许多 SQL 数据库支持 concat()(其他具有等效函数或运算符,例如标准运算符 ||):

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

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