您的位置:首页 > 数据库

django models 数据库 增删改查

2018-02-27 18:22 531 查看
1、模板
1、继承
1、
{%block 名称%}
{%endblock%}

2、
{%extends '父模板名称'%}
2、模型-Models
1、模型
根据数据库中的表和字段来构建编程语言中的类和属性
2、创建 和 使用模型
1、ORM
Object Relational Mapping
对象关系映射
2、数据库的配置
1、settings.py
DATABASES = {
'default':{
'ENGINE':'django.db.backend.mysql',
'NAME':'数据库名',
'USER':'root',
'PASSWORD':'123456',
'HOST':'localhost',
'PORT':'3306',
}
}
3、Models的编写
每个类必须继承自models.Model
class Entry(models.Model):
field1 = models.FieldType(**FiledOptions)

name=models.CharFiled(max_length=30,null=True)
4、将models同步到数据库
1、./manage.py makemigrations
将models类生成为中间的日志文件
2、./manage.py migrate
将日志文件映射到数据库
3、数据的导入和导出
1、版本切换
./manage.py migration 应用名 版本号
2、数据库的导入和导出
... ...
3、通过数据库自动导出Models
./manage.py inspectdb > xxx.py
================================================
1、模型的数据库操作方法(CRUD)
1、通过视图向DB中增加数据
1、Entry.objects.create(属性=值,属性=值)
2、创建一个实体对象,并通过 save() 方法完成增加
obj = Entry(属性=值,属性=值)
obj.save()
3、通过字典创建实体对象,再调用 save()
dic = {
'name':'xx',
'age':33,
'email':''
}
obj = Author(**dic)
obj.save()
2、查询操作(重难点)
所有的查询都要在Entry.objects的基础上完成
1、基本查询操作
语法:all()
用法:Entry.objects.all()
返回:QuerySet
2、查询接口
1、all()
Entry.objects.all()
相当于:select * from ...
2、all().values('列名')
Entry.objects.all().values('name')
相当于:select name from ...
作用:查询所有记录的某一列的值
3、all().values('列1','列2')
Entry.objects.all().values('name','age')
相当于:select name,age from ...
4、get()
只查找一条记录时使用
也只能返回一条记录
如果查询返回多条记录的话,则报错
Entry.objects.get(id=4)
相当于:select * from ... where id=4
5、exclude()
作用:对给定条件取反
Entry.objects.exclude(id=3)
select * from .... where not id=3

Entry.objects.exclude(id=3,age=35)
select * from .... where not (id=3 and age=35)
6、order_by()
Entry.objects.order_by('列名1','-列名2')
指定按照字段们进行排序,如果是多个字段,中间,隔开。默认是按照升序排序,需要降序的话,只需要在列名前加‘-’即可
7、filter()
根据自定义条件查询结果集,可以是一个,也可以是多个,多个的话,条件用 , 隔开。
如果是多个条件的话,其内部是使用 AND 来进行条件连接的
1、使用Entry的属性来作为filter()的条件
ex:
1、Author.objects.filter(id=1)
select * from author where id=1
2、Author.objects.filter(name='王宝强')
3、Author.objects.filter(id=1,name='王宝强')
select * from auther where id=1 and name='王宝强'
2、使用 Filed Lookups (查询谓词)
1、__exact
作用:等值判断
Author.objects.filter(id__exact=1)
SQL:
select * from auther where id=1
2、子查询
inner=Author.objects.filter(name__exact='贾乃亮').values('age')
authors=Author.objects.filter(age__gt=inner)
3、修改操作
1、修改单个对象
1、通过get()得到要修改的实体对象
2、通过实体对象修改属性值
3、再通过实体对象的save()函数,实现保存

auth=Author.objects.get(id=1)
auth.name='宝强.王'
auth.age=45
auth.save()
2、批量修改(修改查询结果集的值)
调用 update() 函数即可
Author.objects.all().update(属性=值,...)
4、删除操作
1、删除单个对象
obj=Author.objects.get(id=1)
obj.delete()
2、批量删除
Author.objects.filter(age__lt=50).delete()
5、F()操作 和 Q()操作
1、F()操作
update author set age=age+10
Author.objects.all().update(age=age+10)

作用:用于在执行中获取某列的值
语法:F('列名')

from django.db.models import F
Author.objects.all().update(age=F('age')+10)

2、Q()操作
AND:Author.objects.filter(id=1,age=35)

from django.db.models import Q
Author.objects.filter(
Q(id__exact=1)|Q(age=35),name='王'
)

select * from author where id=1 or age=35 and name='王'
6、原生的数据库操作方法
1、查询
函数:raw()
语法:Entry.objects.raw(sql)
2、增删改
def sql(request):
with connection.cursor() as cursor:
sql='delete from index_author;'
cursor.execute(sql)
return render(... ...)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: