django中怎么进行数据的增删改,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。
在 web 开发中,最重要的是数据库的设计,就是 models 模型设计,简单的web开发说白了就是对数据库的增删改查,今天先看下数据库的增加,修改,和删除吧,我们操作数据库可以使用原生sql语句,但是如果sql的操作语句不复杂,可以使用django 的 ORM 语句,它是通过一些封装,根据 ORM 的语法可以对数据库增删改查,用一同一个 ORM 语句可以支持对 mysql、sqlite、PostgreSQL、Oracle 等数据库增删改操作,兼容性很强。
我现在的model模型是有两个表,一个学生表,一个班级表,代码如下:
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。
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()
看完上述内容是否对您有帮助呢?如果还想对相关知识有进一步的了解或阅读更多相关文章,请关注亿速云行业资讯频道,感谢您对亿速云的支持。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。