一、ORM是什么
对象关系映射(Object Relational Mapping,ORM):是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。简单来说就是在编程语言中实现的一种虚拟对象数据库。
我们对虚拟对象数据库进行操作,它会转换成具体的SQL去操作数据库,这样就不需要学习复杂的SQL语句了。
ORM优势:不必熟悉复杂的SQL语句,容易上手,避免新手写SQL效率问题。
二、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
名称
2.3.将模型类生成具体的数据库表
生成迁移文件
python manage.py makemigrations
在对应的路径可以查看python代码
执行迁移文件创建表
python manage.py migrate
Django默认使用的是db.sqlite3数据库,需要使用特定的工具才能看到里面的内容
三、使用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',
}
}
3.5.指定数据库驱动
myapp/init.py:
import pymysql
pymysql.install_as_MySQLdb()
3.6.启动项目
3.7.执行迁移文件生成表
python mange.py migrate
3.8.查看数据库会多了这些表
四、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.改
方法一:
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)
五、内置管理后台
一个网站一般都会开发一个后台系统,为管理员提供一种更简单的数据库操作方式
5.1.访问URL
启动Django项目后默认开启后台管理系统
访问地址:http://127.0.0.1:8001/admin
5.2.创建管理员账号
python manage.py createsuperuser
使用用户名和密码登录
5.3.注册模型
myapp/admin.py
from django.contrib import admin
from myapp import models
admin.site.register(models.User) # 注册user表到后台
重启项目
5.4.在后台界面对数据库进行增删改查
进来后会看到所有记录,我这只有一条
修改年龄,并保存
年龄已变为19
增加用户
多了一条记录
删除用户
5.5.设置中文和时区
devops/settings.py
LANGUAGE_CODE = 'zh-hans'
TIME_ZONE = 'Asia/Shanghai'
USE_I18N = True
USE_L10N = True
USE_TZ = False
修改成功
六、模型中的Meta类与方法
Django模型类的Meta是一个内部类,它用于定义一些Django模型类的行为特性。
以下是该常用属性:
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表时,返回具体的字段,默认返回的是一个对象
6.2.数据迁移
python manage.py makemigrations
python manage.py migrate
表名已变为user
变成自定义名字
根据名字显示
七、模型类常用字段
八、模型类常用字段选项
blank=True admin级别可以为空
null=True 数据库级别可以为空
九、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查看