• 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.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
     

     

  • 相关阅读:
    Android高斯模糊技术,实现毛玻璃效果(转)
    设计模式笔记之六:生产消费者模式
    设计模式笔记之五:观察者模式
    设计模式笔记之四:MVP+Retrofit+RxJava组合使用
    设计模式笔记之三:Android DataBinding库(MVVM设计模式)
    Eclipse Code Recommenders 自动补全(联想)神器
    java根据freeMark模板生成内容
    通过java反射机制,获取对象的属性和值(包括所有继承的父类)
    win7下自动更新svn目录
    jdk11 eclipse下开启ZGC
  • 原文地址:https://www.cnblogs.com/huikejie/p/11204848.html
Copyright © 2020-2023  润新知