Django ORM框架的使用

ORM是对象关系映射(Object Relational Mapping)的缩写,由于程序设计者更多采用面向对象的思想,而数据库则以关系作为其基础,ORM的作用使得我们可以采用面向对象的思路来设计数据库,使数据库设计更加简单。Django ORM框架存在很多细节的问题,本文主要帮助大家了解其使用方法,更多的内容在需要时可以从官方文档或者网上进行选择性学习。


Django中直接提供了ORM框架,帮助开发者进行数据库开发。使用Django的ORM框架也十分简单。打开项目的settings.py文件,其中有一条配置:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
    }
}


这就是ORM的配置项。Django默认使用sqlite3作为项目的数据库,我们可以修改配置,常用的MySQL和Oracle都是支持的,只需要修改ENGINE配置项为:

MySQL:django.db.backends.mysql

Oracle:'django.db.backends.oracle'


NAME是数据库文件的路径,需要按照不同的数据库进行配置。


另外,还有USER,PASSWORD和HOST等配置项,可以用来配置数据库的用户名,密码和主机位置。我们学习和开发时,基于sqlite3即可,更加方便。


接下来,再了解两个命令,这两个命令在之前的文章已经出现过,一个是:

>>> python manage.py migrate


该命令用来应用尚未被应用的数据库的变动,比如表的创建和修改。另一个命令是:

>>> python manage.py makemigrations


该命令会改变数据库的变动但并不会被应用,如果希望应用改变,需要执行migrate命令。如果不明白,可以打开login应用的migrations目录看一下,如果执行过makemigrations,会在该目录下生成一些.py文件,这些文件将会操作数据库,而执行migrate,就是将这些操作中未进行的进行操作。


下面我们开始尝试使用一下,打开login目录,找到models.py文件,输入一下内容:

from django.db import models


from django.db import models


class Person(models.Model):
    name = models.CharField(max_length=300)
    age = models.IntegerField()

    def __str__(self):
        return 'name: %s age: %s' \
               % (self.name, self.age)

定义了一个Person类,派生自models.Models类,该类是Django实体类的基类,然后这个类有两个字段,一个是字符串类型的name字段,一个是整型的age字段,__str__是为了在我们操作实体类时,能够查看信息。这样,实体类就创建完成了。依次执行下面两条命令,注意,对app的数据库变动,要在命令后加入app的名称:

>>> python manage.py makemigrations login

>>> python manage.py migrate login


之后,Django会在数据库中创建一个名称为app名称_实体类名称的表,上面的例子,就是login_person,不过,我们没必要太关心这个,我们可以通过实体类操作数据库了,输入以下命令:

>>> python manage.py shell


这样会启动一个Python的终端,这个终端已经帮我们加载了Django的相关环境,不再需要我们手动配置。输入命令引入Person实体类:

>>> from login.models import Person


然后执行

>>> p = Person(name='Tom', age=2)

>>> p.save()


这样我们就在数据库创建了一条数据,查看一下:

>>> Person.objects.all()

<QuerySet [<Person: name: Tom age: 12>]>


QuerySet是我们查询后的数据集,其中有一条数据。查询试试:

>>> Person.objects.filter(name='Tom')

<QuerySet [<Person: name: Tom age: 12>]>


>>> Person.objects.filter(name__contains='om')

<QuerySet [<Person: name: Tom age: 12>]>


注意一下第二条,我们可以使用两个下划线之后添加条件的方式进行条件检索,这里是字段内容包含om,其他可用的条件很多,可查看一下文档。数据库的增和查尝试过了,再看下改:

>>> p = Person.objects.all()[0]
>>> p.age = 16
>>> p.save()
>>> Person.objects.all()[0]
<Person: name: Tom age: 16>


最后是删除一条记录:

>>> Person.objects.get(pk=1).delete()
(1, {'login.Person': 1})
>>> Person.objects.all()
<QuerySet []>


稍微注意一下第一行,我们使用get通过主键取得一条记录,Django为我们的实体类默认生成了一个主键。


以上就是Django ORM框架的配置和基本使用,使用Django的ORM框架,还可以生成一对一,一对多,多对一和多对多的关系,需要的时候可以查看一些资料,使用也是很简单的。


  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值