django notes 六:数据库 CRUD 操作
时间:2021-07-01 10:21:17
帮助过:2人阅读
create
b = Blog(name=
‘Beatles Blog‘, tagline=
‘All the latest Beatles news.‘)
b.save()
# create and save
Blog.objects.create(name=
‘Beatles Blog‘, tagline=
‘All the latest Beatles news.‘)
# update, 外键字段也是一样的
b5.name =
‘New name‘
b5.save()
# 添加 ManyToManyField 用 add
joe = Author.objects.create(name=
"Joe")
entry.authors.add(joe)
# delete
e.delete()
Entry.objects.filter(pub_date__year=2005
).delete()
# 查询 QuerySet
# 默认都是 lazy query, 用到时才会真正执行数据库查询
# 打印生成的 sql 语句, 直接访问 QuerySet 实例的 query 属性
t =
Tag.objects.all()
print t.query
# get all
all_entries =
Entry.objects.all()
# 查询字段 field + 双下环线 + 操作的类型
Entry.objects.all().filter(pub_date__year=2006
)
Entry.objects.filter(pub_date__lte=
‘2006-01-01‘)
# 取 1 条数据,取不到会抛 DoesNotExist 异常,取到多条时会抛 MultipleObjectsReturned 异常
one_entry = Entry.objects.get(pk=1
)
# slice
Entry.objects.all()[:5]
# 转成 sql 是 LIMIT 5
# 外键字段引用
Entry.objects.filter(blog_id=4
)
Entry.objects.filter(blog__name=
‘Beatles Blog‘)
# F expressions 引用并操作数据库字段
from django.db.models
import F
Entry.objects.filter(n_comments__gt=F(
‘n_pingbacks‘))
Entry.objects.filter(n_comments__gt=F(
‘n_pingbacks‘) * 2
)
# 主键查询
Blog.objects.get(id=14)
# __exact is implied
Blog.objects.get(pk=14)
# pk implies id__exact
# Q object 执行数据库 and or 操作
Q(question__startswith=
‘Who‘) | Q(question__startswith=
‘What‘)
# WHERE question LIKE ‘Who%‘ OR question LIKE ‘What%‘
Q(question__startswith=
‘Who‘) & Q(name=
‘leslie‘)
# order_by 默认升序,- 表示降序
Entry.objects.filter(pub_date__year=2005).order_by(
‘-pub_date‘,
‘headline‘)
# Manager.raw() 方法执行 raw sql
for p
in Person.objects.raw(
‘SELECT * FROM myapp_person‘):
print(p)
至于完全手动控制 sql 查询,数据库事物,signal,查询优化和其它细节,用到时直接参考官方文档和源码就行了,我也没用过
django notes 六:数据库 CRUD 操作
标签: