当前位置 > it书童 > django > 正文

django2 模型的增删改查

django it书童 2019-10-04 14:55:38 0赞 0踩 253阅读 0评论

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

使用交互shell

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

$ 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: 清平调其一>]>
转载须注明出处:https://www.itshutong.com/articles/123/the-addition-deletion-and-modification-of-django-2-model
关于我
一个文科出身的程序员,追求做个有趣的人,传播有价值的知识,微信公众号主要分享读书思考心得,不会有代码类文章,非程序员的同学请放心订阅
发表评论
我有句话,不知当讲不当讲?
要讲之前请先 登录