【Django】Django之ORM数据库查询及获取数据操作

【Django】Django之ORM数据库查询及获取数据操作

1、题外-POST请求-接收前端传来的参数

import json

class Register(View):
    def post(self, req):
        body = json.loads(req.body)
        print(body, "body")  # {'username': '111', 'email': '111@qq.com', 'password': '111'} body
        print(body["email"]) # 1231@qq.com

2、models-数据模型

# 权限表
class Permissions(models.Model):
    menu = models.TextField(verbose_name='权限菜单')


# 角色表
class Role(models.Model):
    title = models.CharField(verbose_name='角色名称', max_length=32)
    status = models.IntegerField(verbose_name='状态', default=0)
    permissions = models.ForeignKey(verbose_name='权限', to='Permissions', to_field='id', null=True, blank=True, on_delete=models.SET_NULL)


# 用户表
class Users(models.Model):
    username = models.CharField(verbose_name='用户名', max_length=32)
    email = models.CharField(verbose_name='邮箱', max_length=64)
    password = models.CharField(verbose_name='密码', max_length=64)
    status = models.IntegerField(verbose_name='状态', default=0)
    role = models.ForeignKey(verbose_name='角色', to='Role', to_field='id', null=True, blank=True, on_delete=models.SET_NULL)

3、数据库查询

from app import models

#查询所有
doc = models.Users.objects.filter()
print(doc)  # <QuerySet [<Users: Users object (1)>]>

# 条件查询-当返回为空时
	# filter(**args)
        doc = models.Users.objects.filter(email=body["email"])
        print(doc)  # <QuerySet []>
        if not doc:
            print('查询为空')
            
	# filter(**args).values()
    	doc = models.Users.objects.filter(email=body["email"]).values()
	    print(doc)  # <QuerySet []>
    	if not doc:
            print('查询为空')
	
    # filter(**args).first()
    	doc = models.Users.objects.filter(email=body["email"]).first()
	    print(doc)  # None
    	if not doc:
            print('查询为空')

# 条件查询-当返回不为空时
	# filter(**args)
        doc = models.Users.objects.filter(email=body["email"])
        print(doc)  # <QuerySet [<Users: Users object (1)>]>
        data_dict = []  # 定义数组
        for i in doc:
            data_dict.append({  # 添加每一个对象
                "id": i.id,
                "username": i.username,
                "email": i.email,
                "password": i.password,
                "status": i.status,
                "role_title": i.role.title,  # 去关联的角色表查询角色名称
                "role_permissions_menu": i.role.permissions.menu  # 查询权限
            })
        print(data_dict, 'data_dict')
    	# [{'id': 1, 'username': 'admin', 'email': '13400405244@163.com', 'password': 'admin', 'status': 1, 'role_title': '超级管理员', 'role_permissions_menu': '["all_btn","all_router"]'}] data_dict
        
	# filter(**args).first()
    	doc = models.Users.objects.filter(email=body["email"]).first()
        print(doc)  # Users object (1)
        print(doc.username)  # admin
        print(doc.role.title)  # 超级管理员
        
	# filter(**args).values() 需要list一下
    	doc = list(models.Users.objects.filter(email=body["email"]).values())
        print(doc, "doc")  
        # [{'id': 1, 'username': 'admin', 'email': '13400405244@163.com', 'password': 'admin', 'status': 1, 'role_id': 1}] doc
        
        res_ls = []
        for i in doc:
            role = models.Role.objects.get(id=i["role_id"])
            print(role, "role")  # Role object (1) role
            res_ls.append({
                "id": i["id"],
                "username": i["username"],
                "email": i["email"],
                "password": i["password"],
                "status": i["status"],
                "role_title": role.title,
                "role_permissions_menu": role.permissions.menu
            })
        print(res_ls, 'res_ls')  
        # [{'id': 1, 'username': 'admin', 'email': '13400405244@163.com', 'password': 'admin', 'status': 1, 'role_title': '超级管理员', 'role_permissions_menu': '["all_btn","all_router"]'}] res_ls

	# filter(**args]).values().first()
    	doc = models.Users.objects.filter(email=body["email"]).values().first()
        print(doc)  
        # {'id': 1, 'username': 'admin', 'email': '13400405244@163.com', 'password': 'admin', 'status': 1, 'role_id': 1}
        role = models.Role.objects.get(id=doc["role_id"])
        print(role, "role")  # Role object (1) role
        data_dict = {
            "id": doc["id"],
            "username": doc["username"],
            "email": doc["email"],
            "password": doc["password"],
            "status": doc["status"],
            "role_title": role.title,
            "role_permissions_menu": role.permissions.menu
        }
        print(data_dict, 'data_dict')  
        # {'id': 1, 'username': 'admin', 'email': '13400405244@163.com', 'password': 'admin', 'status': 1, 'role_title': '超级管理员', 'role_permissions_menu': '["all_btn","all_router"]'} data_dict
        
	# all()
    	doc = models.Users.objects.all()
        print(doc)  # <QuerySet [<Users: Users object (1)>]>
        data_dict = []  # 定义数组
        for i in doc:
            data_dict.append({  # 添加每一个对象
                "id": i.id,
                "username": i.username,
                "email": i.email,
                "password": i.password,
                "status": i.status,
                "role_title": i.role.title,  # 去关联的角色表查询角色名称
                "role_permissions_menu": i.role.permissions.menu  # 查询权限
            })
        print(data_dict, 'data_dict')
    	# [{'id': 1, 'username': 'admin', 'email': '13400405244@163.com', 'password': 'admin', 'status': 1, 'role_title': '超级管理员', 'role_permissions_menu': '["all_btn","all_router"]'}] data_dict
        
        
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,你需要安装 Django:`pip install django` 接下来,你需要创建一个 Django 项目:`django-admin startproject myblog`,其中 `myblog` 是项目名称。 然后,你需要在项目目录下创建一个 Django 应用:`python manage.py startapp blog`,其中 `blog` 是应用名称。 接下来,我们需要配置数据库。在 `settings.py` 文件中找到 `DATABASES` 设置,将其修改为: ```python DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'myblog', 'USER': 'root', 'PASSWORD': '123456', 'HOST': 'localhost', 'PORT': '3306', } } ``` 这里使用了 MySQL 数据库,需要安装 PyMySQL:`pip install pymysql`,并在 `__init__.py` 文件中添加以下内容: ```python import pymysql pymysql.install_as_MySQLdb() ``` 接下来,我们需要定义模型类,即 ORM 数据库映射类。打开 `blog/models.py` 文件,添加以下内容: ```python from django.db import models class Article(models.Model): title = models.CharField(max_length=128) content = models.TextField() pub_time = models.DateTimeField(auto_now_add=True) ``` 这里定义了一个 Article 类,它继承自 Django 的 Model 类,用于映射到数据库中的一张表。其中,title、content、pub_time 三个字段分别对应表中的三个列。 接下来,运行以下命令创建表: ```bash python manage.py makemigrations python manage.py migrate ``` 最后,我们可以在 Python Shell 中测试 ORM 数据库映射类: ```bash python manage.py shell >>> from blog.models import Article >>> a = Article(title='Hello, Django', content='This is my first article') >>> a.save() >>> Article.objects.all() <QuerySet [<Article: Article object (1)>]> ``` 这里创建了一个 Article 对象并保存到数据库中,然后使用 `objects.all()` 方法查询所有的 Article 对象。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值