zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    小程序用户拒绝授权地理位置的处理办法
    云开发小程序数据库权限有限,通过云函数修改数据库评论信息
    小程序仿照微信朋友圈点击评论键盘输入
    小程序wx.previewImage查看图片再次点击返回时重新加载页面问题
    js手机端判断滑动还是点击
    Proxy
    Reflect.has检测对象是否拥有某个属性
    简单的axios请求返回数据解构赋值
    为windows terminal 配置 conda
    git clone 遇到问题:fatal: unable to access 'https://github.comxxxxxxxxxxx':
  • 原文地址:https://www.cnblogs.com/hesujian/p/11192157.html
Copyright © 2011-2022 走看看