Django学习笔记之model篇(一)
数据库的配置:
1.在settings.py中配置DATABASES
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', # 数据库引擎
'NAME': 'mydb', #数据库名称
'USER': 'admin', # 链接数据库的用户名
'PASSWORD': 'Root110qwe', # 链接数据库的密码
'HOST': '127.0.0.1', # mysql服务器的域名和ip地址
'PORT': '3306', # mysql的一个端口号,默认是3306
}
}
2.pymsql数据库连接器的配置:
在虚拟环境中安装pymysql: pip install pymysql
设置连接器为pymysql:在主目录下的的init.py文件添加下面两句
import pymysql
pymysql.install_as_MySQLdb()
3.使用django中的模型:
# blog/models.py
from django.db import models
# Create your models here.
class User(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length=30)
age = models.IntegerField()
# 这个__str__方法的作用我们将在查询时看到的样式
def __str__(self):
return 'User<id=%s,name=%s,age=%s>'%(
self.id,self.name,self.age)
将模型类映射到数据库:
1.首先执行以下命令,要创建映射文件
# 在执行前,保证我们创建模型的APP是已经注册过的APP
python manage.py makemigrations blog
2.执行以下命令,将映射文件中的映射数据提交到数据库中
python manage.py migrate blog
打开数据我们能看到创建的以app名_模型名的数据表,而其他的一些表格是django自动生成的.
注意:如果要删除表,那么可以去django模型中注释掉模型类,然后执行映射的命令,不要手动在命令行里面去删除.
数据的增删改查
1.增加数据
在视图函数中导入User模型类,然后使用下面的方法添加数据
from .models import User
def add_user(request):
# F1
xps = User(name='xps',age=18)
xps.save()
# F2
xps2 = User()
xps2.name='xps2'
xps2.age=17
xps2.save()
# F3
User.objects.create(name='xps3',age=19) # 这种方法不用save了
# F4
User.objects.get_or_create(name='xps4',age=20) # 存在则不添加,不存在则添加
return HttpResponse("插入数据成功")
2.查找数据
在视图函数中导入User模型类,实现简单的查找
from .models import User
def search_user(request):
rs = User.objects.all() # 返回的是 QuerySet类型的
rs = User.objects.get(id=2) # get()方式返回的单个对象,如果符合条件的对象有多个,则get报错!
rs = User.objects.first() # 只能有一条,不能查有多个相同值的数据,不然会报错
rs = User.objects.filter(name='xps') # 返回的是QuerySet类型
rs = User.objects.exclude(name='xps2') # 除了...
rs = User.objects.last() # 最后一个值
rs = User.objects.order_by('age') # 以...进行排序
rs = User.objects.order_by('-age') # 以...进行排序(逆向)
rs = User.objects.order_by('age','id') # 以...进行排序(多个值)
rs = User.objects.all().values() # 变换成字典类型输出
rs = User.objects.count() # 查询到的数据的个数
###### 查询对象的条件
# exact 相当于等于号:
rs = User.objects.filter(name__exact='xiaoming')
# iexact:跟exact,只是忽略大小写的匹配。
# contains 包含:
rs = User.objects.filter(name__contains='xiao')
# icontains 跟contains,唯一不同是忽略大小写。
# startwith 以什么开始:
rs = User.objects.filter(name__startswith='xiao')
# istartswith:同startswith,忽略大小写。
# endswith:同startswith,以什么结尾。
# iendswith:同istartswith,以什么结尾,忽略大小写。
# in 成员所属:
rs = User.objects.filter(age__in=[18, 19, 20])
# gt 大于:
rs = User.objects.filter(age__gt=20)
# gte 大于等于:
rs = User.objects.filter(age__gte=20)
# lt 小于:
rs = User.objects.filter(age__lt=20)
# lte 小于等于:
rs = User.objects.filter(age__lte=20)
# range 区间:
rs = User.objects.filter(age__range=(18, 20))
# isnull 判断是否为空:
rs = User.objects.filter(country__isnull=True)
# 切片:
rs = User.objects.all()[:2]
# 注意: 不能使用负数作为切片。
# print(rs[0]) #QuerySet类型可以索引取值
# print(list(rs[2:4])) # 可以切片
print(rs)
return HttpResponse('查询数据成功')
# QuerySet对象类型
"""
1.支持索引
2.支持切片,不支持负索引
3.可迭代对象
4.可通过list进行强行转换
"""
3.修改数据
在视图函数中导入User模型类,然后使用下面的方法更新数据
# blog/views.py
def update_user(request):
# F1 先查找到对象,对属性重新赋值
xps = User.objects.get(name='xps')
xps.name = "XPS"
xps.save()
# F2
User.objects.filter(id=2).update(name='xxx') # 这种方法不用save了
User.objects.all().update(age=10)
return HttpResponse('更新数据成功')
4.删除数据
def delete_user(request):
# User.objects.get(id=4).delete()
rs = User.objects.all()
print(dir(rs)) # 可以查看有没有这个属性
User.objects.filter(name='xps3').delete()
return HttpResponse('删除数据成功')