Django ORM模型
  TEZNKK3IfmPf 2023年11月14日 34 0
 

一、ORM是什么

对象关系映射(Object Relational Mapping,ORM):是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。简单来说就是在编程语言中实现的一种虚拟对象数据库。

我们对虚拟对象数据库进行操作,它会转换成具体的SQL去操作数据库,这样就不需要学习复杂的SQL语句了。

ORM优势:不必熟悉复杂的SQL语句,容易上手,避免新手写SQL效率问题。

Django ORM模型

二、Model(模型类)

2.1.使用模型类定义一个User表,包含多字段

myapp/models.py:

from django.db import models

# 定义一个user表
class User(models.Model):
    user = models.CharField(max_length=30)  # 用户名,最大长度为30
    name = models.CharField(max_length=30)  # 名字
    sex = models.CharField(max_length=10)
    age = models.IntegerField()
    label = models.CharField(max_length=100)    #标签(备注)

2.2.在settings.py配置文件中INSTALLED_APPS列表添加APP名称

Django ORM模型

2.3.将模型类生成具体的数据库表

生成迁移文件

python manage.py makemigrations

Django ORM模型
在对应的路径可以查看python代码
Django ORM模型
执行迁移文件创建表

python manage.py migrate

Django ORM模型
Django默认使用的是db.sqlite3数据库,需要使用特定的工具才能看到里面的内容
Django ORM模型

三、使用MySQL数据库

3.1.Linux安装Mysql

3.2.进入到Mysql创建test库

mysql -uroot -h192.168.137.2 -p
create database test;

3.3.使用pip3工具安装pymysql模块

pip3 install pymysql

3.4.修改django默认连接数据库

devops/settings.py:

DATABASES = {
     
       
    'default': {
     
       
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'test',
        'USER': 'root',
        'PASSWORD': '123456',
        'HOST': '192.168.137.2',
        'PORT': '3306',
    }
}

Django ORM模型

3.5.指定数据库驱动

myapp/init.py:

import pymysql
pymysql.install_as_MySQLdb()

3.6.启动项目

Django ORM模型

3.7.执行迁移文件生成表

python mange.py migrate

3.8.查看数据库会多了这些表

Django ORM模型

四、ORM增删改查

4.1.增

from myapp.models import User
def user_add(request):
	User.objects.create(
		user='aliang',
		name='阿良',
		sex='男',
		age='30',
		label="IT,讲师,老司机" )
return HttpResponse("用户添加成功!")

或者用save方法保存:

obj = User(
	user=user,
	name=name,
	sex=sex,
	age=age,
	label=label
)
obj.save()

4.2.删

User.objects.filter(id=3).delete()

4.3.改

Django ORM 更新/修改操作

方法一:

User.objects.filter(user='amei').update(age=27,label='公关,漂亮,喜欢购物')
User.objects.filter(ip=ip).update(**{
     
       field:value})   # **{field:value}为动态字段,field为字段名,value为字段值

方法二:

当表有字段具有auto_now属性且你希望他能自动更新时,必须使用方法二的更新,不然auto_now字段不会更新

data = {
     
       **{
     
       field:value}}    # 保存动态字段到一个字典
_t = Vm_Info.objects.get(ip='%s' % ip)
_t.__dict__.update(**data)
_t.save()

4.4.查

def user_list(request):
	user_list = User.objects.all()
return render(request, "user.html", {
     
       'user_list': user_list})

获取所有数据
User.objects.all()

加条件获取数据
User.objects.filter(user=‘amei’)
User.objects.filter(age__gt=28)

获取单条数据
User.objects.get(id=2)

五、内置管理后台

一个网站一般都会开发一个后台系统,为管理员提供一种更简单的数据库操作方式
Django ORM模型

5.1.访问URL

启动Django项目后默认开启后台管理系统

访问地址:http://127.0.0.1:8001/admin
Django ORM模型

5.2.创建管理员账号

python manage.py createsuperuser

Django ORM模型
使用用户名和密码登录
Django ORM模型

5.3.注册模型

myapp/admin.py

from django.contrib import admin
from myapp import models

admin.site.register(models.User)    # 注册user表到后台

重启项目
Django ORM模型

5.4.在后台界面对数据库进行增删改查

Django ORM模型
进来后会看到所有记录,我这只有一条
Django ORM模型
修改年龄,并保存
Django ORM模型
年龄已变为19
Django ORM模型

增加用户
Django ORM模型
Django ORM模型
多了一条记录
Django ORM模型
Django ORM模型
删除用户
Django ORM模型
Django ORM模型

5.5.设置中文和时区

devops/settings.py

LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False

Django ORM模型
修改成功
Django ORM模型

六、模型中的Meta类与方法

Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性。

以下是该常用属性:
Django ORM模型

6.1.myapp/models.py

    class Meta:
        app_label = "myapp"     # 指定APP名称
        db_table = "user"       # 自定义生成的表名
        verbose_name_plural = "用户表"     # 对象的可读名称,不带复数s
        ordering = ["sex"]

    def __str__(self):
        return self.name    #当查询User表时,返回具体的字段,默认返回的是一个对象

Django ORM模型

6.2.数据迁移

python manage.py makemigrations
python manage.py migrate

表名已变为user
Django ORM模型
变成自定义名字
Django ORM模型
根据名字显示
Django ORM模型

七、模型类常用字段

Django ORM模型

八、模型类常用字段选项

blank=True admin级别可以为空
null=True 数据库级别可以为空
Django ORM模型

九、QuerySet序列化

序列化:将Python对象转为传输的数据格式(通常是json)
反序列化:将传输的数据格式转为Python对象

ORM查询返回的是QuerySet对象,如果你要提供数据接口,这显然是不行的。

有两种方法可以转为JSON字符串:
• 使用内建函数 serializers
• 遍历QuerySet对象将字段拼接成字典,再通过json库编码

9.1.方法一

from django.core import serializers
obj = User.objects.all()
data = serializers.serialize('json', obj)

9.2.方法二,可以定义返回的内容

from django.http import JsonResponse
obj = User.objects.all()
d = {
     
       }
for i in obj:
    d['name'] = i.name
    d['user'] = i.user
    d['label'] = i.label
return JsonResponse(d)

9.3.示例:返回数据库的内容,以Json格式显示

myapp/urls.py添加

re_path('api/$', views.api)

myapp/views.py

from django.http import HttpResponse
from myapp.models import User
from django.core import serializers

def api(request):
    obj = User.objects.all()
    data = serializers.serialize('json', obj)	#把对象转换为Json
    return HttpResponse(data)

postman查看
Django ORM模型

【版权声明】本文内容来自摩杜云社区用户原创、第三方投稿、转载,内容版权归原作者所有。本网站的目的在于传递更多信息,不拥有版权,亦不承担相应法律责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@moduyun.com

  1. 分享:
最后一次编辑于 2023年11月14日 0

暂无评论

推荐阅读
  TEZNKK3IfmPf   2024年03月29日   60   0   0 djangopython
  TEZNKK3IfmPf   2023年11月15日   21   0   0 django
  TEZNKK3IfmPf   2023年11月15日   24   0   0 django时间
  TEZNKK3IfmPf   2023年11月15日   272   0   0 djangosearch
  TEZNKK3IfmPf   2023年11月14日   153   0   0 djangoorm
  TEZNKK3IfmPf   2023年11月15日   34   0   0 djangopython
TEZNKK3IfmPf