ORM全称对象关系映射

作用通过python面向对象的代码简单快捷的操作数据库,但是封装程度太高,有时候sql语句效率偏低,需要自己sql语句

类—–>表

对象—>记录

对象属性—>记录某个字段对应的值

写在models.py文件

1.先在models.py书写一个

from django.db import models

# Create your models here.
class Mytable(models.Model):
    id=models.AutoField(primary_key=True)
    #由于一张表中必须有一个主键字段,并且一般情况下都叫id字段
    #所以orm在当你不定主键字段时候orm都会自动帮你创建一个名为id主键字段
    #也就是我们创建模型表的时候如果主键名字没有别的叫法(比如你要叫cid就需要自己写),
    #那么主键字段可以省略不写
    name=models.CharField(max_length=32,verbose_name='用户名')
    #CharField必须指定max_length参数,不指定直接报错
    #verbose_name是所有字段都有的,用来对字段的解释
    password=models.IntegerField(verbose_name='密码')
    

2.数据库迁移命令

2.1 在terminal输入命令: python manage.py makemigrations

意思是将操作记录记录到  migrations文件夹,在这文件夹下会多出一个文件

之后输入python manage.py migrate ,执行数据库迁移命令后会自动创建

只要修改models.py中跟数据库相关代码,就必须重新执行上述两条命令。

2.2 偷懒输入两句数据库迁移命令,与上一个效果一样(建议一个命令熟练后再使用这个

只需要输入makemigrations

                  migrate

orm字段的增删改查

字段的增加

1.在类中写好字段代码后,可以终端直接给出默认值

选择1给增加的字段添加默认值选择2退出自己去代码中增加

2.该字段可以为空null=Ture

age=models.IntegerField(null=True)

3.直接给字段设置默认值

age=models.IntegerField(default='18')

字段的修改

直接修改代码代码然后执行数据库迁移的两条命令即可

字段的删

直接注释对应的字段然后执行数据库的两条命令即可

注意:执行完毕之后字段对应数据也都没有了,在操作models.py的时候一定要细心,执行迁移命令之前最好检查好代码

建议当你离开你的计算机之后一定要锁屏

数据增删改查

第一种

res=models.User.objects.filter(username=username)
返回值先看成是列表套数据对象的格式支持索引取值 切片操作 但不支持负数索引
也不推荐使用索引取值
user_obj=models.User.objects.filter(username=username).first()

 第二种

    user_queryset=models.User.objects.all()
    return render(request,'userlist.html',locals())

第一种方式

 from app01 import models
 res=models.User.objects.create(username=username,password=password)
返回值就是当前创建的对象本身
 print(res,res.username,res.password)

第二种方式

user_obj=models.User(username=username,password=password)
user_obj.save() #保存数据

改        

<a href="/edit_user/?user_id={{ user_obj.id }}" >编辑</a>
拼接一个url路径?user_id
然后更新数据
models.User.objects.filter(id=edit_id).update(username=username,password=password)

models.User.objects.filter(id=delete_id).delete()

补充:真正的删除功能需要二次确认删除功能内部其实不是真正的删除我们会给数据添加一标识字段用来表示数据是否删除了,如果数据被删了仅仅只是讲字段修改一个状态

ORM创建关系

表关系:一对一,一对多,多对多

例:图书表,出版社表,作者表,作者详情

利用orm创建表关系代码如下

from django.db import models

class Book(models.Model):
    title=models.CharField(max_length=32)
    price=models.DecimalField(max_digits=8,decimal_places=2)
    #图书和出版社是一对多,外键字段放在多的里,也就是图书表里
    publish=models.ForeignKey(to='Publish',on_delete=models.CASCADE,null=True, blank=True, default=None)
    #会自动publish后加_id
    #图书和作者是多对多,外键字段在任意一方,建议放在使用频率较多的一方
    authors=models.ManyToManyField(to='Author')
    #authors是一个虚拟字段,主要用来告诉orm,图书表和作者表是多对多关系,让orm自动帮你创建三张class Publish(models.Model):
    name=models.CharField(max_length=32)
    addr=models.CharField(max_length=32)

class Author(models.Model):
    name=models.CharField(max_length=32)
    age=models.IntegerField()

    #作者和作者详情是一对一的关系,外键字段建在任意一方都可以,建议建在查询频率较高的表
    author_detail=models.OneToOneField(to='AuthorDetail',on_delete=models.CASCADE,null=True, blank=True, default=None)
class AuthorDetail(models.Model):
    phone=models.BigIntegerField()
    addr=models.CharField(max_length=32)

注意:Django2.0以上版本orm创建表关系,在一对一和创建主键时需要加上

on_delete=models.CASCADE,null=True, blank=True, default=None

原文地址:https://blog.csdn.net/flclyz/article/details/134605670

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_35706.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注