DGs*_*DGs 3 python postgresql sqlalchemy cs50
我正在尝试查询一个名为 results 的变量,在该变量中我查询数据库以查找标题类似于从 post 方法接收到的搜索栏输入的书籍。我正在运行的查询如下:
results = db.execute("SELECT * FROM books WHERE title LIKE (%:search%)", {"search": search}).fetchall();
Run Code Online (Sandbox Code Playgroud)
通过上述查询,我收到以下错误:
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) syntax error at or near "%".
Run Code Online (Sandbox Code Playgroud)
如果我删除 %,或者如果我手动提供LIKEa 参数(例如:),这将按预期工作LIKE ('%the%'),但这并没有真正返回任何结果,除非搜索与数据库中的书名之一完全相同,并且它失败了通过对参数进行硬编码来使用变量替换的目的。我还想知道在使用 SQLAlchemy 查询时是否可以使用 ILIKE 来区分大小写。
我知道我可以使用对象关系映射,并使用不同的函数,例如过滤器函数等等,但是对于这个分配,我们打算不使用 ORM 并使用简单的查询。有什么建议?
将整个搜索字符串作为参数传递给 LIKE运算符:
results = db.execute(text("SELECT * FROM books WHERE title LIKE :search"),
{"search": f"%{search}%"}).fetchall();
Run Code Online (Sandbox Code Playgroud)
或者在数据库中连接:
results = db.execute(
text("SELECT * FROM books WHERE title LIKE ('%' || :search || '%')"),
{"search": search}).fetchall();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1179 次 |
| 最近记录: |