【Django】数据库的增删改查

有目标就不怕路远。年轻人.无论你现在身在何方.重要的是你将要向何处去。只有明确的目标才能助你成功。没有目标的航船.任何方向的风对他来说都是逆风。因此,再遥远的旅程,只要有目标.就不怕路远。没有目标,哪来的劲头?一车尔尼雷夫斯基

导读:本篇文章讲解 【Django】数据库的增删改查,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

简单的介绍下增删改

class MyOperations(View):
    def get(self, request):
        # objects已经集成了数据库的增删改查操作
        # 新建
        name = User.objects.get_or_create(name='啊哈', age=80, phone_number='88888888')
        user = User()
        user.name = '李四'
        user.age = 99
        user.phone_number = '12345678'
        user.save()

        # 查询
        user = User.objects.get(id=1)
        users=User.objects.all()
        print(users)

        # 更新
        user=User.objects.filter(id=1).update(age=9999)

        # 删除
        user = User.objects.get(id=1)
        user.delete()
        return render(request, 'User.html')


class User(models.Model):
    name = models.CharField(max_length=20, blank=True, null=True)
    age = models.IntegerField(default=0)
    phone_number = models.EmailField(blank=True, default='')
    # 创建时添加
    created_time = models.DateTimeField(auto_now_add=True)
    # 更新时变更时间
    modified_time = models.DateTimeField(auto_now=True)

    def __str__(self):
        return self.name

详细的介绍下查询📖

查询方式分类

  • 原生SQL
    • Table.objects.raw('select * from table')
  • 基于ORM
    • Table.objects.filter(name='xxx')

基于ORM常用的查询方法

可以通过dir(Table.objects)查询objects的方法:

['__class__', '__class_getitem__', '__delattr__', '__dict__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__slotnames__', '__str__', '__subclasshook__', '__weakref__', '_constructor_args', '_db', '_get_queryset_methods', '_hints', '_insert', '_queryset_class', '_set_creation_counter', '_update', 'aggregate', 'alias', 'all', 'annotate', 'auto_created', 'bulk_create', 'bulk_update', 'check', 'complex_filter', 'contribute_to_class', 'count', 'create', 'creation_counter', 'dates', 'datetimes', 'db', 'db_manager', 'deconstruct', 'defer', 'difference', 'distinct', 'earliest', 'exclude', 'exists', 'explain', 'extra', 'filter', 'first', 'from_queryset', 'get', 'get_or_create', 'get_queryset', 'in_bulk', 'intersection', 'iterator', 'last', 'latest', 'model', 'name', 'none', 'only', 'order_by', 'prefetch_related', 'raw', 'reverse', 'select_for_update', 'select_related', 'union', 'update', 'update_or_create', 'use_in_migrations', 'using', 'values', 'values_list']

其中常用的查询方法有:

  • Table.objects.all() 返回Table表中所有的数据
  • Table.objects.get(xx=xxx) 返回Table表中满足条件的一条数据
  • Table.objects.filter(xx=xxx) 返回Table表中满足条件的一条/多条数据
    • 值得注意的是,如果未查询到满足条件的数据,Table.objects.get(xx=xxx) 会抛出异常,Table.objects.filter(xx=xxx) 则返回空数据
  • Table.objects.all()/filter().exists() 返回是否有对象,True/False
  • Table.objects.all()/filter().count() 返回获取到的对象的数量
  • Table.objects.all()/filter().exclude(xx=xxx) 返回的数据中排除满足xx=xxx的
  • Table.objects.filter().distinct(‘name’) 返回的数据中按照列name去重
  • Table.objects.filter().order_by(‘name’) 返回的数据中按照列name排序

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/135453.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!