django之ORM

Posted jixu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了django之ORM相关的知识,希望对你有一定的参考价值。

ORM配置

技术图片
"""
1、创建数据库
2、配置mysql的数据库链接
    setting文件里的DATABASES设置为
    DATABASES = 
    ‘default‘: 
        ‘ENGINE‘: ‘django.db.backends.mysql‘,
        ‘NAME‘: ‘s8day61‘,    ## 数据库名称
        ‘USER‘: ‘root‘,
        ‘PASSWORD‘: ‘123‘,    ## 安装 mysql 数据库时,输入的 root 用户的密码
        ‘HOST‘: ‘127.0.0.1‘,
    
3、注册app
    也是在settings文件中的INSTALLED_APPS
    把你的app文件名加进去
4、需要把mysqldb设置为pymysql链接
    python3中用的是pymysql
    python2中使用的是mysqldb
    
    为了兼容,都改成pymysql
    app下的__init__文件
        import pymysql
        pymysql.install_as_MySQLdb()
5、创建表(2个命令)
    
    python manage.py makemigrations
    
    python manage.py migrate

"""
技术图片

单表的增删改查

技术图片
# 先导入models文件
from class_app import models

# 增
models.Classes.objects.create(name="xxx")
# 增加会有一个返回值,这个返回值就是这次插入的对象

# 查
# 查出所有对象    ==> 列表里套对象
models.Classes.objects.all()
# 查出单个对象    ==> 取第一个对象
models.Classes.objects.first()
# 也可以
models.Classes.objects.all().first()
# 过滤查询
models.Classes.objects.filter(name="xxx").all()

# 删
models.Classes.objects.filter(name="xxx").delete()

# 改
models.Classes.objects.filter(name="xxx").update(name="ooo")
# 如果需要改的值很多,并且在一个字典里,也可以用**打散
models.Classes.objects.filter(name="xxx").update(**dic)
技术图片

django中orm的表的正查与反差

技术图片
# 如果一张表和其他的表建有外键关系,那么从这张表查另一张表称为正查,反之称为反差
# 先建立两个外键关系的表
class Classes(models.Model):    # 如果我们不设置一张表的id时,django会自动帮我创建一个自增的主键id
    name = models.CharField(max_length=32,null=True)

class Students(models.Model):
    name = models.CharField(max_length=32,null=True)
    cid = models.ForeignKey("Classes",null=True)    # 会自动帮我们和另一张表的主键建立外键关系

# 正查
for obj in students:
    print(obj.cid.name)     # 可以直接通过对象点里面的属性就可以点出另一个类的对象,可以继续取值

# 反查
obj.student_set.all()       # 就是查出所有的对象

# 还可以通过下划线直接取到另一张表的值
# values是取出括号里对应的值,通过列表里套字典的形式
# values_list 是取出括号里对应的值, 通过列表里套元组的形式
models.Classes.objects.values("id","name","cid__name").all()
技术图片

双下划线

技术图片
# 查询时通过外键名__另一张表的名字  可以查到关联表的值
# eg:
models.Classes.objects.values("id","name","cid__name").all()    #这个cid__name可以查询到关联表对应的name
# 查询时可以在filter中加入限制条件  __lt 代表小于  __gt代表大于
# eg:
models.Classes.objects.filter(id__lt = 3).all()     # id < 3
models.Classes.objects.filter(id__gte = 3).all()    # id >= 3
技术图片

 

以上是关于django之ORM的主要内容,如果未能解决你的问题,请参考以下文章

Django

Django基础--3

ORM增删改查

ORM Django 多对多

使用 ORM Django 过滤新更新的查询集返回空查询集

与ORM django和sqlite3数据库相关的问题