django听课笔记41.文件介绍2.数据库连接1.django连接数据库2.pycharm连接数据库3.models文件写sql语句1.python操作数据库2.objects.filter方法查询数据库3.create方法增加记录4.django创建表5.外键
1.文件介绍
2.数据库连接
1.django连接数据库
settings.py
DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'day2', 'USER': 'root', 'PASSWORD': '123456', 'HOST': '127.0.0.1', 'PORT': 3306, 'CHARSET': 'UTF8' } }
2.pycharm连接数据库
1.pycharm右侧点击database>mysql
2.按要求输入数据库名称,user,password
3.models文件写sql语句
1.python操作数据库
django orm orm:对象关系映射 类->表 对象->记录 对象属性>记录某个字段对应的值
day2>app01>models.py
数据库迁移命令(命令行)
python manage.py makemigrations
python manage.py migrate
from django.db import models # Create your models here. class User(models.Model): #auto_increament,int类型 id = models.AutoField(primary_key=True) username = models.CharField(max_length=32) password = models.CharField(max_length=32) #每增加记录,需要设空或设置默认值,并进行数据迁移 hobby = models.CharField(max_length=32,null=True) info = models.CharField(max_length=32,default='student') #得到对象的username def __str__(self): return self.username
2.objects.filter方法查询数据库
views.py
from django.shortcuts import render,HttpResponse,redirect from app01 import models # Create your views here. def home(request): return render(request,'home.html') def login(request): if request.method == "GET": return render(request,'login.html') elif request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') #objects.filter方法返回的是对象列表 obj = models.User.objects.filter(username=username).first() if obj: if obj.password == password : return HttpResponse('success') else: return HttpResponse("wrong password") else: return HttpResponse("wrong username")
django连接数据库需要下载的第三方库: pymysql mysqlclient
3.create方法增加记录
models.User.objects.create(username=username,password=password)
views.py
def register(request): if request.method == "GET": return render(request,'register.html') elif request.method == 'POST': username = request.POST.get('username') password = request.POST.get('password') hobby = request.POST.get('hobby') obj = models.User.objects.create(username=username,password=password,hobby=hobby) print(obj,obj.username,obj.password,obj.hobby) return HttpResponse('success register!')
4.django创建表
图书表,出版社表,作者表,作者详情表
图书表和出版社表示一对多的关系
图书表和作者表是多对多的关系
作者表和作者详情表是一对一的关系
django会自己创建id,自动增长的主键
id = models.AutoField(primary_key=True)
models.py
class Book(models.Model): title = models.CharField(max_length=32) #max_digits表示总位数,decimal_places表示小数点位数 price = models.DecimalField(max_digits=8,decimal_places=2) class Publish(models.Model): name = models.CharField(max_length=32) addr = models.CharField(max_length=64) class Author(models.Model): name = models.CharField(max_length=32) class AuthorDetail(models.Model): age = models.IntegerField() phone = models.BigIntegerField() addr = models.CharField(max_length=64)
5.外键
ForeignKey表示设置外键 1.to表示要关联的表(必选参数) 2.to_filed表示要关联的字段(可选,默认关联主键) 3.on_delete表示当删除关联表中的数据时,当前 表和关联表的行为.值有很多选项:
CASCADE((级联删除)
PROTECT(会报完整性的错误)
SET_NULL(会把外键字段设置为空,前提是允许为空)
SET_DEFAULT(会给外键设置默认值)