python - 从 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 的人?
解决方案
也许使用 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()
推荐阅读
- mysql - 在重复键上
- java - 等待多个正在运行的线程中的一个线程
- typescript - 如何在不同的文件中添加 prisma 中间件
- python - 我需要帮助才能使用 cifar 10 中的 10 个类中的 8 个。通常它会加载所有 10 个类
- c# - Kotlin:如何“移植”一个类,该类扩展使用泛型的对象和方法列表,从 c# 到 kotlin?
- django - 每次我更新表单时,用户字段都会更改为 Null
- git - 让 git 只做合并而不是合并+提交
- events - 事件驱动架构是否应该针对所有数据和分析平台?
- obiee - 如何将 ESSBase 立方体与 OBIEE 12 c 连接起来
- r - 在多个绘图的 Shiny Dashboard 中实现搜索功能