ORM_Flask

ORM操作详解
本文详细介绍了ORM(对象关系映射)的基本操作,包括数据的增删改查,以及如何使用Python的SQLAlchemy库进行数据的过滤、排序、偏移和限制查询。文章还深入探讨了如何优化查询以提高数据处理效率。
ORM增加
# 使用sql提交数据
insrt into() values ...
# 通过模型类的db进行提交数据:session表示数据库的会话对象,保存了数据库的操作
user = User(mobile='15212345678',name='python40')
# 把user对象添加到db.session中
db.session.add(user)
# 添加之后需要进行提交动作
db.session.commit()
ORM查询
# sql语句查询表中所有手机号数据:
    select mobile from user_basic;
# ORM查询表中所有手机号数据:
    User.query.all()
# sql查询第一个数据:
    select mobile from user_basic limit 1;
# ORM查询第一条数据
    User.query.first()
    User.query.filter().first()
    User.query.filter_by().first()
    # get查询
    User.query.get(主键id)
    db.session.query(User).all
    db.session.query(User).first
    db.session.query(User).get(主键id)
# sql过滤查询
    select mobile form user_basic where mobile='手机号'
# ORM过滤查询
    User.query.filter_by().all()/.first()
    User.query.filter().all()/.first()
# sql逻辑或查询
    select mobile from user_basic where id=1 or id=20;
# ORM逻辑或查询
    from sqlalchemy import or_
    User.query.filter(or_(User.mobile=='手机号',User.name=='python40')).all()/first
# sql逻辑非查询
    select mobile from user_basic where not(user_id=1 and user_id=2);
# ORM逻辑非查询
    from sqlalchmy import not_
    User.query.filter(not_(User.mobile=='手机号')).all()/first()
# ORM偏移位置查询
    User.query.offset(偏移数).first()/.all()
# ORM获取限制条目数据
    User.query.limit(限制的条目数).all()/first()
# ORM偏移位置并限制条目数据
    User.query.limit(限制的条目数).offset(偏移数).all()/first()
    User.query.offset(偏移数).limit(限制的条目数).all()/first()
# SQL排序
    select mobile from user_basic where user_id=10 order by id desc;
    select mobile from user_basic where user_id=10 order by id asc;
# ORM排序
    User.query.filter().order_by(User.id.desc()).all()
# 复合查询
    User.query.filter(User.mobile.startwith('13')).order_by(User.id.desc()).all()/fitst()
    query = User.query.filter(User.name.startswith('13'))
    query = query.order_by(User.id.desc())
    query = query.offset(2).limit(5)
    ret = query.all()
# 优化查询
    from sqlalchemy.orm import load_only
    User.query.options(load_only(User.name,User.mobile)).filter_by(id=1).first()
# filter,必须使用类.字段名,可以使用丰富的过滤条件,使用查询执行器
# filter_by,只使用字段名,只能使用赋值操作,使用查询执行器
### 比较 Django Admin 和 Flask 实现后台管理功能的方式 #### Django Admin 的特点 Django内置了强大的ORM(对象关系映射)系统,支持多种数据库后端,并且提供了管理数据库模型的命令行工具[^1]。Django自带了一个非常完善的管理后台(Django Admin),这个后台可以自动生成基于模型的操作界面,允许管理员轻松地增删改查数据记录。它还提供了一系列的安全特性以及权限管理系统。 对于开发者来说,只需要定义好相应的Model类即可自动获得一套完整的CRUD操作页面;而对于最终用户而言,则能够享受到友好易用的人机交互体验。 #### Flask 中实现类似功能的方法 相比之下,在Flask框架下并没有内建如此完备的一站式解决方案。但是通过第三方扩展库`flask-admin`也可以很方便地搭建起相似效果的应用程序后端控制面板[^2]。该组件是一个简单而可扩展的管理接口框架,旨在帮助程序员快速创建美观大方的数据表单视图并对其进行维护工作。 具体来讲,使用`flask-admin`来模拟Django Admin的主要步骤如下: - 安装依赖包 `pip install flask-admin` - 导入必要的模块并将其实例化加入到应用程序实例当中 ```python from flask import Flask from flask_admin import Admin app = Flask(__name__) admin = Admin(app, name='My App', template_mode='bootstrap3') ``` - 创建视图表单类继承自`BaseView`其子类之一,比如用于展示SQLAlchemy ORM实体类型的`ModelView` ```python from flask_sqlalchemy import SQLAlchemy db = SQLAlchemy(app) class MyModel(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(80)) from flask_admin.contrib.sqla import ModelView admin.add_view(ModelView(MyModel, db.session)) ``` 综上所述,虽然两者都致力于简化Web应用中的资源管理和配置流程,但在设计理念和技术选型方面存在明显差异[^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值