1.ORM系统
对象关系映射(Object Relational Mapping)
像操作对象一样从数据库操作数据
模型类必须卸载app下的models.py文件中
1.1 连接数据库
settings.py文件中配置DATABASES
DATABASES=[
'default':{
'ENGINE':'django.db.backends.mysql',
'NAME': 'myblog',
'USER':'pybaby',
'PASSWORD':'881212',
'HOST':'127.0.0.1',
'PORT':'3306',
}
]
1.2 把pymyql作为连接器
安装pymyql
在主目录__init__.py文件中写入
import pymysql
pymysql.install_as_MySQLdb()
1.3注册APP
1.4新建模型类
class User(models.Model):
id = models.AutoField(primary_key=True)
name = models.CharField(max_length = 50,null = False)
age = models.IntegerField()
create_time = models.DateField(auto_now_add = True)
update_time = models.DateTimeField(auto_now = True)
1.5 在manage.py中执行命令
makemigrations
migrate
1.6 插入数据
定义视图函数
方法一:
def add_user(request):
taka =User(name = 'taka',age = 18)
taka.save()
return HttpResonse('插入成功')
方法二:
def add_user(request):
taka =User()
taka.name = 'taka',
taka.age = 18
taka.save()
return HttpResonse('插入成功')
方法三:
def add_user(request):
User.objects.create(name = 'taka',age = 18)
return HttpResponse('插入成功')
方法四:
User.objects.get_or_create(name = ‘taka’,age = 18)
1.7数据查询
view视图函数中
re = User.objects.all() 返回query_set对象,可直接用list强制转换
re = User.objects.get(id=1) 返回一个模型类,值不唯一时会报错
re =User.objects.filter(name=‘taka’) 返回query_set对象
re =User.objects.filter(name=‘taka’).first() 返回一个模型类
重写,更改输出格式
def __str__(self):
return 'id=%s,name=%s,age=%s' %(self.id,self.name,self.age)
查询常用方法:
re = User.objects.all()
re = User.objects.all().first()
re = User.objects.all().last()
re = User.objects.filter(name = ‘xiaopo’)
re = User.objects.exclude(name = ‘xiaopo’)
re = User.objects.get(name = ‘xiaopo’)
re = User.objects.order_by(‘age’)
re = User.objects.order_by(‘age’,‘id’) 多项排序
re = User.objects.order_by(‘-age’) 逆向排序
re = User.objects.all().values() 转为字典格式
re = User.objects.all().count() 返回数量
常用查询条件:
exact 相当于等号
re = User.objects.filter(name__exact=‘xiaopo’)
contains 包含
re = User.objects.filter(name__contains=‘xiaopo’)
startwith 以…开头
re = User.objects.filter(name__startwith=‘xiao’)
endwith 以…结尾
re = User.objects.filter(name__endwith=‘xiao’)
in 成员所属
re = User.objects.filter(age__in=[18,19,20])
gt 大于
gte 大于或等于
lt 小于
lte 小于或等于
range 区间
re = User.objects.filter(age__range=(18,20))
isnull 判断是否为空
re = User.objects.filter(city__isnull=True)
1.8 数据修改
view视图函数中
方法一:字典键值对修改
re = User.objects.get(id=1)
re.name = 'tizi'
re.save()
return HttpResponse('修改成功')
方法二:update方法
re =User.objects.filter(name='taka')
re.update(name='xiaoming')
return HttpResponse('修改成功')
update方法的的对象需要一个query_set对象
可以批量修改数据
1.9 删除数据
re = User.objects.get(id=1)
re.delete()
return HttpResponse('删除')
delete方法对一个模型类或query_set对象都适用
1.10 常用字段
IntegerField
CharField
TextField
DateField
DateTimeField
BooleanField
NullBooleanField
creat_time=models.DateField(auto_now_add=True) 自动创建插入时间
update_time=models.DateTimeField(auto_now=True) 自动更新时间 只对save方法响应 对update方法不响应。
1.11常用参数
primary_key
unique
null
blank
default