django2实战3.模型的增删改查

字数 282阅读 671

继上篇 django2实战2.创建博客应用

django对数据的操作采用的是ORM模式,即将数据库的增删改查抽象成对象方法的调用,开发人员只需要调用相关的方法,而不需要写sql语句。

使用交互shell

进入交互shell环境(推荐安装ipython)

☁  mysite  python manage.py shell
Python 3.6.6 (default, Sep  5 2018, 08:57:22)
Type 'copyright', 'credits' or 'license' for more information
IPython 6.5.0 -- An enhanced Interactive Python. Type '?' for help.

In [1]:

添加数据

In [1]: from django.contrib.auth.models import User

In [2]: from blog.models import Post

In [3]: user = User.objects.get(username='admin')

In [4]: post = Post(title='静夜思',
   ...:             slug='jing-ye-si',
   ...:             body='举头望明月,低头思故乡',
   ...:             author=user)
   ...:

In [5]: post.save()

进入后台查看post数据 http://127.0.0.1:8000/admin/blog/post/

新文章

修改数据

若post已经指定了一个数据,再调用save,即相当于修改原记录

In [7]: post
Out[7]: <Post: 静夜思>

In [8]: post.body = '床前明月光,疑是地上霜'

In [9]: post.save()

后台查看post内容 http://127.0.0.1:8000/admin/blog/post/2/change/

修改内容

查询数据

  • all 获取所有内容
In [10]: all_posts = Post.objects.all() # 检索所有的文章

In [11]: all_posts
Out[11]: <QuerySet [<Post: 静夜思>, <Post: 清平调其一>]>
  • filter 过滤内容
In [13]: Post.objects.filter(publish__year=2018)
Out[13]: <QuerySet [<Post: 静夜思>, <Post: 清平调其一>]>

In [14]: Post.objects.filter(publish__year=2018, title='静夜思')
Out[14]: <QuerySet [<Post: 静夜思>]>
  • exclude 反向搜索
In [15]: Post.objects.filter(publish__year=2018).exclude(title__startswith='静') # 检索2018年发布,且除了标题是以‘静’字开头的文章
Out[15]: <QuerySet [<Post: 清平调其一>]>
  • order_by 排序

到后台再新增几条数据

将进酒

  君不见,黄河之水天上来,奔流到海不复回。
  君不见,高堂明镜悲白发,朝如青丝暮成雪!
  人生得意须尽欢,莫使金樽空对月。
  天生我材必有用,千金散尽还复来。
  烹羊宰牛且为乐,会须一饮三百杯。
  岑夫子,丹丘生,将进酒,杯莫停。
  与君歌一曲,请君为我倾耳听。
  钟鼓馔玉不足贵,但愿长醉不复醒。
  古来圣贤皆寂寞,惟有饮者留其名。
  陈王昔时宴平乐,斗酒十千恣欢谑。
  主人何为言少钱,径须沽取对君酌。
  五花马、千金裘,呼儿将出换美酒,与尔同销万古愁!
将进酒

望庐山瀑布

日照香炉生紫烟,遥看瀑布挂前川。
飞流直下三千尺,疑是银河落九天。
望庐山瀑布
In [17]: Post.objects.all()
Out[17]: <QuerySet [<Post: 望庐山瀑布>, <Post: 将进酒>, <Post: 静夜思>, <Post: 清平调其一>]>
In [22]: Post.objects.order_by('publish') # 按 publish 正序
Out[22]: <QuerySet [<Post: 清平调其一>, <Post: 静夜思>, <Post: 将进酒>, <Post: 望庐山瀑布>]>

In [23]: Post.objects.order_by('-publish') # 按 publish 倒序
Out[23]: <QuerySet [<Post: 望庐山瀑布>, <Post: 将进酒>, <Post: 静夜思>, <Post: 清平调其一>]>

删除数据

In [29]: post = Post.objects.get(title='静夜思')

In [30]: post
Out[30]: <Post: 静夜思>

In [31]: post.delete()
Out[31]: (1, {'blog.Post': 1})

In [32]: post
Out[32]: <Post: 静夜思>

In [33]: Post.objects.all()
Out[33]: <QuerySet [<Post: 望庐山瀑布>, <Post: 将进酒>, <Post: 清平调其一>]>

下一节将讲解如何创建文章的列表页和详情页。如果你感兴趣,请关注我的django2实战文集

如果觉得本文对你有所帮助,点个赞,或者赏杯咖啡钱,你的认可对我很重要