我正在尝试使用 SQLAlchemy 对查询使用通配符,但我得到一个空列表。
My code:
engine = create_engine(os.getenv("DATABASE_URL"))
db = scoped_session(sessionmaker(bind=engine))
s = input("Search for a book: ")
q = db.execute(f"SELECT * FROM books WHERE isbn LIKE '%\:s\%' OR author LIKE '%\:s\%' OR title LIKE '%\:s\%'", {"s": s}).fetchall()
我在用着\
为了转义函数使用占位符变量的值时插入的引号,如果我删除它们,则会收到此错误:
sqlalchemy.exc.ProgrammingError: (psycopg2.errors.SyntaxError) syntax error at or near "grey"
LINE 1: SELECT * FROM books WHERE isbn LIKE '%'grey'%' OR author LIK...
无论如何,在 SQLAlchemy 中可以使用通配符吗?
我可以通过使用格式化字符串而不是变量占位符来完成这项工作,但这将使我的代码容易受到 SQL 注入的攻击。
我也在使用 PostgreSQL。
The %
字符应该是您传入的参数的一部分,而不是模板字符串,并且您不应该手动添加引号。让 SQLAlchemy 为您做这件事。
此外,模板不需要是 f 字符串。
例如:
s = input("Search for a book: ")
q = db.execute(
"SELECT * FROM books WHERE isbn LIKE :s OR author LIKE :s OR title LIKE :s",
{"s": "%" + s + "%"},
).fetchall()
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)