orm概述
1 orm:对象关系映射(跟语言无关)
数据库中的表 ----》对应程序的一个类
数据库中的一行数据----》对应程序中的一个对象
2 orm能干的事
-创建表(不能创建数据库,手动创建数据库)
-增加删除表内字段
-增删查改数据
第一步在models中写要给类
class UserInfo(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=32)
password =models.CharField(max_length=64)
第二步,把表创建出来(执行两个命令)
-python3 manage.py makemigrations
-python3 manage.py migrate
orm操作数据库 增
class UserInfo(models.Model):
username = models.CharField(max_length=32,verbose_name='用户名')
password = models.CharField(max_length=32,verbose_name='密码')
age = models.IntegerField()
addr = models.CharField(max_length=64,verbose_name='用户地址')
phone = models.IntegerField(verbose_name='联系方式')
def __str__(self):
return self.username
from app01 import models
from django.shortcuts import render,HttpResponse,redirect
import hashlib
def index(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
m = hashlib.md5()
m.update(password.encode('utf-8'))
res = m.hexdigest()[0:16]
age = request.POST.get('age')
addr = request.POST.get('addr')
phone = request.POST.get('phone')
userinfo = models.UserInfo.objects.create(username=username,password=res,age=age,addr=addr,phone=phone)
userinfo.save()
return HttpResponse('200 ok 保存成功')
from django.contrib import admin
from django.urls import path
from app01 import views
urlpatterns = [
path('admin/', admin.site.urls),
path('index',views.index),
]
orm 查
def userlist(request):
data = models.UserInfo.objects.all()
return render(request,'templates/userlist.html',locals())
orm 修改
def alter(request):
alter_id = request.GET.get('id')
print(alter_id)
re_alter = models.UserInfo.objects.filter(id=alter_id).first()
if request.method == 'POST':
post_id = request.POST.get('id')
username = request.POST.get('username')
password = request.POST.get('password')
age = request.POST.get('age')
addr = request.POST.get('addr')
phone = request.POST.get('phone')
"""
这里其实还有一步 判断用户修改的数据不能为空 或者是非法字符等等 现在暂时省略
"""
affect_rows = models.UserInfo.objects.filter(pk=alter_id).update(username=username,password=password,age=age,addr=addr,phone=phone)
print(affect_rows)
print(alter_id)
return redirect('http://127.0.0.1:8000/userlist')
return render(request,'templates/alter.html',locals())
orm 删除
def delect(request):
del_id = request.GET.get('id')
models.UserInfo.objects.filter(pk=del_id).delete()
return redirect('http://127.0.0.1:8000/userlist')
orm 增
def insert(request):
if request.method == 'POST':
username = request.POST.get('username')
password = request.POST.get('password')
age = request.POST.get('age')
addr = request.POST.get('addr')
phone = request.POST.get('phone')
"""
这里其实还有一步 判断用户修改的数据不能为空 或者是非法字符等等 现在暂时省略
"""
affect_rows = models.UserInfo.objects.create(username=username, password=password, age=age,addr=addr, phone=phone)
print(affect_rows)
return redirect('http://127.0.0.1:8000/userlist')
return render(request,'templates/insert.html')
表与表的关系的建立
class Book(models.Model):
title = models.CharField(max_length=64)
"""
max_digits=None,:总位数
decimal_places=None:小数位数
"""
price = models.DecimalField(max_digits=8, decimal_places=2)
"""对于外键字段关系,会自动帮我们拼接_id"""
publish = models.ForeignKey(to='Publish',on_delete=models.CASCADE)
"""authors它是一个虚拟字段,它不会实际在表中创建出来这个字段,这一句可以自动帮助我们创建出来第三张表"""
authors = models.ManyToManyField(to='Author')
"""出版社表"""
class Publish(models.Model):
name = models.CharField(max_length=64)
addr = models.CharField(max_length=64)
"""作者表"""
class Author(models.Model):
name = models.CharField(max_length=64)
author_detail = models.OneToOneField(to='AuthorDetail',on_delete=models.CASCADE)
"""作者详情表"""
class AuthorDetail(models.Model):
phone = models.CharField(max_length=64)
email = models.CharField(max_length=64)