从Python向Postgresql服务器查询[重复]

问题描述 投票:0回答:1

我正在执行此查询

engine = create_engine(os.getenv("DATABASE_URL")) 
db = scoped_session(sessionmaker(bind=engine))
isbn = 03759
a = db.execute("SELECT * FROM books WHERE idnumber LIKE '%:temp%'", {"temp":isbn}).fetchall()

参考书本表的图片:books database

我想查询id编号为03759的行,但是python不允许添加前导零。我尝试将其转换为字符串并运行查询,但是由于有一对这样的引号引起了我错误:

SELECT * FROM books WHERE idnumber LIKE '%'03759'%'

这是sqlalchemy如何转换的。是否有任何解决方法,以便我只能查询其idnumber中具有03759的用户?

python sqlalchemy
1个回答
-3
投票

也许使用f-string首先生成查询字符串,然后在execute命令中使用它

isbn = '03759'
q = f"SELECT * FROM books WHERE idnumber LIKE '%{isbn}%'"
a = db.execute(q).fetchall()

编辑:

[我认为IljaEverilä是正确的,如果变量isbn来自用户输入,则上面的代码易于进行查询注入。要解决此问题,请使用IljaEverilä给出的答案:

isbn = '03759'
q = "SELECT * FROM books WHERE idnumber LIKE :isbn"
q_params = { "isbn": f"%{isbn}%" }
a = db.execute(text(q), q_params).fetchall()
© www.soinside.com 2019 - 2024. All rights reserved.