Db.session.query vs Model.query

本文探讨了在Flask-SQLAlchemy中使用`session.query`与`Model.query`两种查询方法的相同点和不同点。尽管它们都支持链式查询,但在实际应用中,`session.query`更适用于复杂查询,代码简洁易读,而`Model.query`在单模型查找时提供了一种简化的过滤方式,提高代码的书写便利性。
摘要由CSDN通过智能技术生成

前言

之间在使用中发现用flask-sqlalchemy 有两种查询的方法 一种是 session.query 一种是Model.query 本文通过几个编程实验探究下两者的区别。

相同之处

两种方法调用返回的对象都是query 都支持链式查询,在类似列表过滤查询条件这样的场景下,链式查询显得十分有用。

不同之处

找了一些网上的资料好像没有说明两者之间性能的区别,主要区别在用法上。Session.query 是sqlalchemy的原生功能,而model.query 是针对 model的增强,不是原生功能。具体到应用上两者的区别主要为用法不同,以下面几个场景结合输出的·sql语句为例子来体会下。
查询场景1:查询出学生的考试列表
要获得的内容格式如下:

[{
“id”:,
“course_name”:,
“testpaper_title”:,
“start_time”:,
“event_time”:,status”:,
“test_scores”:,
},
{
“id”:,
“course_name”:,
“testpaper_title”:,
“start_time”:,
“event_time”:,status”:,
“test_scores”:
  • 2
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
下面是使用 Flask 和 SQLAlchemy 进行数据库增删改查操作的示例代码: ```python from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'your_database_uri' db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50)) @app.route('/create_user', methods=['POST']) def create_user(): new_user = User(name='John') db.session.add(new_user) db.session.commit() return 'User created successfully' @app.route('/update_user/<int:user_id>', methods=['POST']) def update_user(user_id): user = User.query.get(user_id) if user: user.name = 'New Name' db.session.commit() return 'User updated successfully' else: return 'User not found' @app.route('/delete_user/<int:user_id>', methods=['POST']) def delete_user(user_id): user = User.query.get(user_id) if user: db.session.delete(user) db.session.commit() return 'User deleted successfully' else: return 'User not found' @app.route('/get_user/<int:user_id>', methods=['GET']) def get_user(user_id): user = User.query.get(user_id) if user: return f'User ID: {user.id}, Name: {user.name}' else: return 'User not found' if __name__ == '__main__': app.run() ``` 在上述示例代码中,我们定义了一个 `User` 模型类,它映射到数据库中的用户表。我们通过路由来定义不同的操作,包括创建用户、更新用户、删除用户和获取用户。 - `/create_user` 路由用于创建新用户。我们创建一个新的 `User` 对象,将其添加到 `db.session` 中,然后调用 `db.session.commit()` 提交更改到数据库。 - `/update_user/<int:user_id>` 路由用于更新用户。我们通过 `User.query.get(user_id)` 查询到要更新的用户对象,然后修改其属性并提交更改到数据库。 - `/delete_user/<int:user_id>` 路由用于删除用户。我们通过 `User.query.get(user_id)` 查询到要删除的用户对象,然后调用 `db.session.delete(user)` 并提交更改到数据库。 - `/get_user/<int:user_id>` 路由用于获取用户信息。我们通过 `User.query.get(user_id)` 查询到指定的用户对象,并返回其属性。 请注意,上述示例中的 `your_database_uri` 部分需要替换为实际的数据库连接 URI。另外,这只是一个简单的示例,实际的应用中可能需要更复杂的逻辑和错误处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值