码迷,mamicode.com
首页 > 数据库 > 详细

django notes 六:数据库 CRUD 操作

时间:2015-08-12 19:05:13      阅读:110      评论:0      收藏:0      [点我收藏+]

标签:

CRUD 也没什么可说的,django 提供了完善的 orm  api, 直接用就行了。

我只贴几个列子,一看就明白了,自己再用用就熟了。

# 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 操作

标签:

原文地址:http://www.cnblogs.com/lesliefang/p/4725021.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!