CS50:LIKE 运算符,使用 % 扩展进行变量替换
CS50: LIKE operator, variable substitution with % expansion
我正在尝试查询一个名为 results 的变量,我在其中查询数据库以查找标题与从 post 方法接收的搜索栏输入类似的书籍。我是运行的查询如下:
results = db.execute("SELECT * FROM books WHERE title LIKE (%:search%)", {"search": search}).fetchall();
使用上面的查询,我得到以下错误:
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) syntax error at or near "%".
如果我删除 %,或者如果我手动给 LIKE
一个参数(例如:LIKE ('%the%')
),这会按预期工作,但这不会真正返回任何结果,除非搜索与数据库中的一本书名完全一样,它破坏了通过对参数进行硬编码来使用变量替换的目的。我还想知道在使用 SQLAlchemy 查询时是否可以使用 ILIKE 来区分大小写。
我知道我可以使用 Object 关系映射,并使用不同的功能,例如过滤功能和诸如此类的东西,但是对于这个作业,我们不应该使用 ORM 而是使用简单的查询。有什么建议么?
将整个搜索字符串作为参数传递给 LIKE 运算符:
results = db.execute(text("SELECT * FROM books WHERE title LIKE :search"),
{"search": f"%{search}%"}).fetchall();
或者在数据库中连接:
results = db.execute(
text("SELECT * FROM books WHERE title LIKE ('%' || :search || '%')"),
{"search": search}).fetchall();
我正在尝试查询一个名为 results 的变量,我在其中查询数据库以查找标题与从 post 方法接收的搜索栏输入类似的书籍。我是运行的查询如下:
results = db.execute("SELECT * FROM books WHERE title LIKE (%:search%)", {"search": search}).fetchall();
使用上面的查询,我得到以下错误:
sqlalchemy.exc.ProgrammingError: (psycopg2.ProgrammingError) syntax error at or near "%".
如果我删除 %,或者如果我手动给 LIKE
一个参数(例如:LIKE ('%the%')
),这会按预期工作,但这不会真正返回任何结果,除非搜索与数据库中的一本书名完全一样,它破坏了通过对参数进行硬编码来使用变量替换的目的。我还想知道在使用 SQLAlchemy 查询时是否可以使用 ILIKE 来区分大小写。
我知道我可以使用 Object 关系映射,并使用不同的功能,例如过滤功能和诸如此类的东西,但是对于这个作业,我们不应该使用 ORM 而是使用简单的查询。有什么建议么?
将整个搜索字符串作为参数传递给 LIKE 运算符:
results = db.execute(text("SELECT * FROM books WHERE title LIKE :search"),
{"search": f"%{search}%"}).fetchall();
或者在数据库中连接:
results = db.execute(
text("SELECT * FROM books WHERE title LIKE ('%' || :search || '%')"),
{"search": search}).fetchall();