首页 > 解决方案 > 从 Python 查询 postgresql 服务器

问题描述

我正在执行这个查询

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()

book表的图片参考: books数据库

我想查询 idnumber 中包含 03759 的行,但 python 不允许添加前导零。我尝试将其转换为字符串并运行查询,但它给了我一个错误,因为有一对额外的引号是这样的:

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

这就是它被 sqlalchemy 转换的方式。是否有任何解决方法,以便我只能查询 ID 号为 03759 的人?

标签: pythonsqlalchemy

解决方案


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

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

编辑:

isbn我认为 Ilja Everilä 是正确的,如果变量来自用户输入,上面的代码很容易受到查询注入的影响。要解决此问题,请使用 Ilja Everilä 答案中给出的这个:

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

推荐阅读