前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >用人话讲解django之数据的增删改

用人话讲解django之数据的增删改

作者头像
用户4945346
发布2020-06-16 10:32:09
3840
发布2020-06-16 10:32:09
举报
文章被收录于专栏:pythonista的日常pythonista的日常

在 web 开发中,最重要的是数据库的设计,就是 models 模型设计,简单的web开发说白了就是对数据库的增删改查,今天先看下数据库的增加,修改,和删除吧,我们操作数据库可以使用原生sql语句,但是如果sql的操作语句不复杂,可以使用django 的 ORM 语句,它是通过一些封装,根据 ORM 的语法可以对数据库增删改查,用一同一个 ORM 语句可以支持对 mysql、sqlite、PostgreSQL、Oracle 等数据库增删改操作,兼容性很强。

我现在的model模型是有两个表,一个学生表,一个班级表,代码如下:

代码语言:javascript
复制
class Student(models.Model): # 一定要继承
    # CharField为字符串类型,必须有max_length设置最大长度,verbose_name在django后台显示该英文字段的中文意思
    name = models.CharField(max_length=30, verbose_name="学生姓名")
    # IntegerField整型
    age = models.IntegerField(default=16, verbose_name="学生年龄")
    # DecimalField浮点型,max_digits=5表示整数部分和小数位数之和不大于5,decimal_places表示小数的最大位数,
    # null=True表示字段可以为空,blank=True表示在admin后台中该数据栏可以为空
    score = models.DecimalField(verbose_name='成绩', max_digits=5, decimal_places=2, null=True, blank=True)#
    # EmailField该字段必须符合邮箱格式
    email = models.EmailField(verbose_name='邮箱', null=True, blank=True)
    # TextField 字段位文本类型,长度没有限制
    introduce = models.TextField(verbose_name="学生自我介绍")
    # DateTimeField为日期类型,auto_now_add=True该条数据创建的时间,数据更新时,时间数值不变
    # auto_now=True该条数据创建的时间,数据更新时,时间数值也会改变
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="更新时间")
    # ForeignKey一对多外键,比如一个班级有多个学生,就属于一对多,外键要放到"多"的那张表,
    # related_name是对外键取别名,常用在django的orm反向查询中
    cls = models.ForeignKey('Class', related_name="stu_cls", null=True, on_delete=models.PROTECT)


    # 下面是django后台字段显示控制
    class Meta:
        verbose_name_plural = verbose_name = "学生表"
    def __str__(self):
        return self.name


class Class(models.Model): # 班级表
    name = models.CharField(verbose_name='班级名称',max_length=10)
    created_at = models.DateTimeField(auto_now_add=True, verbose_name="创建时间")
    updated_at = models.DateTimeField(auto_now=True, verbose_name="更新时间")

    def __str__(self):
        return self.name

    class Meta:
        verbose_name = verbose_name_plural = '班级'

然后进行同步数据库操作,在 pycharm 中打开终端(Terminal),在命令行中输入:

下面在一个 views.py 文件中写一个视图函数,使用 ORM 进行基本的增删改操作。记得给函数配置对应的 url。

代码语言:javascript
复制
def orm_test(request):
    # 新增一个名字为1901的一个班级,create是新增方法,里面可以接受多个字段参数
    # Class.objects.create(name="1901")
    # 同时新增一个学生和班级操作
    # 新增一个班级名称为1903的班级,返回一个班级实例
    cls_instance = Class.objects.create(name="1903")
    # stu_info左边的key要和Student模型字段对应上,因为cls是外键,所以要对应一个班级的实例
    stu_info = {
        "name":"静静",
        "age": "18",
        "score":"67.50",
        "email": "123@qq.com",
        "introduce": "我是静静",
        "cls": cls_instance
    }
    Student.objects.create(**stu_info)
    # 将名字为1901的班级名称改为1901_xiu,filter为过滤,支持多个参数,update是更新方法,支持多个参数
    # Class.objects.filter(name="1901").update(name="1901_xiu")
    # 将名字为1901_xiu的班级删除掉,delete是删除方法
    # Class.objects.filter(name="1901_xiu").delete()

项目源码地址:https://github.com/zxycode-2020/django_tutrital2/tree/master

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-02-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 pythonista的日常 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
数据库
云数据库为企业提供了完善的关系型数据库、非关系型数据库、分析型数据库和数据库生态工具。您可以通过产品选择和组合搭建,轻松实现高可靠、高可用性、高性能等数据库需求。云数据库服务也可大幅减少您的运维工作量,更专注于业务发展,让企业一站式享受数据上云及分布式架构的技术红利!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档