使用原始 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,然后将其传递给查询。
我正尝试在我的 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,然后将其传递给查询。