ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

django之ORM

2019-07-15 23:51:37  阅读:130  来源: 互联网

标签:__ name objects models ORM django Classes id


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
复制代码

 

标签:__,name,objects,models,ORM,django,Classes,id
来源: https://www.cnblogs.com/jixu/p/11192369.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有