【发布时间】:2020-01-22 04:49:31
【问题描述】:
我正在尝试使用通配符进行使用 SQLAlchemy 的查询,但我得到的是一个空列表。
我的代码:
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。
【问题讨论】:
-
为什么要转义自己的参数,而这是参数化查询的重点?
-
我试图转义占位符变量插入的引号。
标签: python sql sqlalchemy wildcard