SQLAlchemy中SQL查询中的备用撇号

2024-05-14 17:54:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图在数据库中搜索一本书,因此我首先检查数据库中是否存在用户通知的数据(可以是标题、ISBN或作者姓名),然后检查是否存在部分数据,最后返回所有结果。你知道吗

为此,我使用SQLAlchemy和FLASK-where在Python中编写了这段代码

  • searchBy是数据库中列的名称,并且
  • searchFor是用户输入的数据

是的。你知道吗

books = db.execute(f"SELECT * FROM books JOIN authors ON books.author_id = authors.id \
                   WHERE ({searchBy} = :searchFor) OR ({searchBy} LIKE :searchFor%)", 
                   {"searchFor": searchFor}).fetchall()

然而,当:searchFor被其相应的值替换时,它在非介子之间输出。你知道吗

 ...(title = 'Animal Farm') OR (title LIKE 'Animal Farm'%)

导致此错误的原因

sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) syntax error at or near ")"
LINE 1: ...              WHERE (title = 'Love') OR (title LIKE 'Love'%)
                                                                      ^

有谁能帮助我理解为什么会发生这种情况,以及如何正确地做到这一点?你知道吗


Tags: or数据用户id数据库titlewherebooks
1条回答
网友
1楼 · 发布于 2024-05-14 17:54:26

发生这种情况的原因是它将变量作为字符串传递(在本例中应该是这样)。知道了这一点,您将需要将%符号与搜索字符串连接起来。这样的方法应该有用:

books = db.execute(f"SELECT * FROM books JOIN authors ON books.author_id = authors.id \
                   WHERE ({searchBy} = :searchFor) OR ({searchBy} LIKE (:searchFor || '%'))", 
                   {"searchFor": searchFor}).fetchall()

相关问题 更多 >

    热门问题