1、选择mysql数据库
在setting中配置:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'py', #你的数据库名称
'USER': 'root', #你的数据库用户名
'PASSWORD': '', #你的数据库密码
'HOST': '', #你的数据库主机,留空默认为localhost
'PORT': '3306', #你的数据库端口
}
}
设置完后,再启动我们的Django项目前,我们需要激活我们的mysql。
然后,启动项目,会报错:no module named MySQLdb
这是因为django默认你导入的驱动是MySQLdb,可是MySQLdb对于py3有很大问题,所以我们需要的驱动是PyMySQL
首先我们在终端安装pymysql:
pip install pymysql
1
所以,我们只需要找到项目名文件下的__init__.py,在里面写入:
import pymysql
pymysql.install_as_MySQLdb()
问题解决!
2、定义数据库表以及表之间的关系
我们在这里(modles.py)定义一个学校表School,班级表Class,学号表Number,用户表Userinfo,之间的关系是Sclool与Class 一对多,Userinfo与Class多对多,Number与Userinfo一对一。
from django.db import models
# Create your models here.
class Userinfo(models.Model):
'''定义数据库表,类名就是表名,max_length相当于varchar,字段格式定义'''
username = models.CharField(max_length=32,null=True)
password = models.CharField(max_length=32,null=True)
specialty = models.CharField(max_length=32, null=True)
def __str__(self):
return self.username
#定义学校表
class School(models.Model):
#blank表示在django可以为空,verbose_name表示在django中的显示
name = models.CharField(max_length=128,null=True,blank=True,verbose_name='名字')
#URLField表示在会判断会不会是url,其他形式的也一样其实功能跟上面的一样
address = models.URLField(max_length=128,null=True,blank=True,verbose_name='地址')
email = models.EmailField(max_length=128,null=True,blank=True,verbose_name='邮箱')
# true_false = models.BooleanField(max_length=32,null=True,blank=True,verbose_name='是否')
date = models.DateField(verbose_name='时间')
#对应下面的班级表,一对多,可以理解为一个学校可以有多个班级,1对多
cla = models.ForeignKey(to='Class',default=1)
def __str__(self):
return self.name
class Number(models.Model):
#学号可以11对应,1对1
num = models.OneToOneField(to='Userinfo',verbose_name='学号')
def __str__(self):
return self.num
#定义班级表
class Class(models.Model):
name = models.CharField(max_length=128, null=True, blank=True, verbose_name='名字')
#多个班级多个用户,多对多的关系
user = models.ManyToManyField(to='Userinfo')
def __str__(self):
return self.name
初始化表,然后往表里面填充一些数据:
python manage.py makemigrations
python manage.py migrate
示例数据:
例如学校表:
3、数据库操作 查询
我们通过(views.py中)models.School.objects方法来获取到数据库里面的数据,然后根据条件查询
from django.shortcuts import render,HttpResponse
from bbsAPP import models
# Create your views here.
def list(request):
school = models.School.objects.all() #查找全部,拿到的是querset_list 类型
print ("查找全部。。。")
for item in school:
print (item,type(item))
school = models.School.objects.get(id=1) #精确查找,拿到的是querset类型,
print ("精确匹配。。。")
print (school,type(school),school.name)
s = models.School.objects.filter(name='清华') #如果models.School.objects.filter.first() 能拿到第一个值,反之last()
print("查询检索。。。")
for item in s: #根据关键字检索,可能会拿到多个值
print(item,type(item))
dic = {'name':'清华'}
#以字典形式传入值来匹配内容
obj = models.School.objects.filter(**dic).first()
print ("字典传参形式。。。")
print (obj,type(obj))
return HttpResponse('this is list')
得到的结果:
控制台输出:
查找全部。。。
清华 <class ‘bbsAPP.models.School’>
精确匹配。。。
清华 <class ‘bbsAPP.models.School’> 清华
查询检索。。。
清华 <class ‘bbsAPP.models.School’>
字典传参形式。。。
清华 <class ‘bbsAPP.models.School’>
3、数据库操作 增加
增加语法更加精简,通过models.School.objects.create 便可以实现。
from django.shortcuts import render,HttpResponse
from bbsAPP import models
# Create your views here.
def add(request):
dic={'name':'北大','date':'2018-12-24'}
obj = models.School.objects.create(**dic)
print("字典传参形式增加。。。")
print (obj,type(obj),obj.name)
obj1 = models.School.objects.create(name='复旦',date='2018-12-24')
print ('参数赋值形式增加。。。')
print (obj1, type(obj1), obj1.name)
return HttpResponse('this is add')
控制台会输出:
字典传参形式增加。。。
北大 <class ‘bbsAPP.models.School’> 北大
参数赋值形式增加。。。
复旦 <class ‘bbsAPP.models.School’> 复旦
数据库对应值,圈住部分为增加:
4、数据库操作 删除
调用models.School.objects.filter 来匹配字段,然后调用delete()方法达到删除的目的
from django.shortcuts import render,HttpResponse
from bbsAPP import models
# Create your views here
def delete(request):
dic = {'name': '复旦',}
obj=models.School.objects.filter(**dic).delete()
print (obj,type(obj))
return HttpResponse('this is delete')
控制台输出:
其中的数字代表删除的条数
(1, {‘bbsAPP.School’: 1}) <class ‘tuple’>
此时 数据库中的school表中的name为复旦的字段将被删除
4、数据库操作 修改
修改和删除调用的方式类似,只是调用的是update()方法,
from django.shortcuts import render,HttpResponse
from bbsAPP import models
# Create your views here
def update(request):
dic = {'name': '北大', }
obj = models.School.objects.filter(**dic).update(name='浙江大学')
print (obj,type(obj))
return HttpResponse('this is update')
控制台输出:
1代表修改次数
1 <class ‘int’>
数据库中的字段已经改变为浙江大学
另外的一种修改方式:
这种方式匹配不到值的时候会报错,所以一般不推荐:
obj1 = models.School.objects.get(name='浙江大学')
obj1.name='草鸡大学'
obj1.save()
这种方式也能直接修改数据。
|
|