Python学习日志(十二)

今天通过Python的原生数据库SQLite3来学习Django中数据库的配置和应用。

在正式开始之前,首先来了解一点Django中数据库的知识以及不光是Django中数据库的知识:
常见的数据库有很多种,用得最多的⼀般是关系型数据库。比如:MySQLPostgreSQL、SQLServer、Oracle、SQLite3等。
其中SQLServer作为一款微软开发的老型数据库软件,目前已经不再普遍,但是其依旧具有易上手便操作的特点。
而Oracle作为其中的昂贵软件,其必然得不到普及,再加上这家公司的“专利流氓”称号,那只能让开发者畏而远之。
而Django虽然可以使用各大数据库,但是它本身已经包含了一个微型数据库,那就是SQLite3,它具有小型,但是易于帮助开发的特点。
但是SQL语句使用对于软件开发来说实在是过于繁琐,故而为了更简便地使用数据库,人们又开发了ORM系统。
(对象关系映射(英语:(Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。ORM方法论基于三个核心原则:
简单:以最基本的形式建模数据。
传达性:数据库结构被任何人都能理解的语言文档化。
精确性:基于数据模型创建正确标准化的结构。)

接下来正式开始学习Django中数据库的使用。
首先是配置数据库:
我们需要打开当前Django项目下的settings.py文件,可以在其中看到如下配置:
DATABASES = {
‘default’: {
‘ENGINE’: ‘django.db.backends.sqlite3’,
‘NAME’: os.path.join(BASE_DIR, ‘db.sqlite3’),
}
}
通常,这个配置文件使用 SQLite 作为默认数据库。如果只是想尝试下 Django,这是最简单的选择。 Python内置 SQLite,所以无需额外安装来使用它。当开始⼀个真正的项目时,你可能更倾向使用⼀个功能更加丰富的数据库,例如MySQL。
如果你想使用其他数据库,你需要安装合适的 database bindings ,然后改变设置文件中 DATABASES ‘default’ 项中的某些键值:

  1. ENGINE 可选值有:
    ‘django.db.backends.sqlite3’
    ‘django.db.backends.postgresql’
    ‘django.db.backends.mysql’
    ‘django.db.backends.oracle’
  2. NAME - 数据库的名称
    DATABASES = { ‘default’: { ‘ENGINE’: ‘django.db.backends.sqlite3’, ‘NAME’: os.path.join(BASE_DIR, ‘db.sqlite3’), } }
    如果使用的是 SQLite,数据库将是你电脑上的⼀个文件,在这种情况下, NAME应该是此文件的绝对路径。默认值 os.path.join(BASE_DIR, ‘db.sqlite3’) 如果不使用SQLite,则必须添加某些额外设置,比如USER、PASSWORD、HOST等等。

其次是个人项目配置:
我们需要在settings.py的文件中声明
在这里插入图片描述
配置完成后,需要初始化数据库相关的表格:
python manage.py migrate

然后,我们需要设计数据模型,用来存放和规划我们需要的数据:
打开models.py文件:
在这里插入图片描述
需要了解以下内容:
在这里插入图片描述
数据模型创建完成后,需要将模型同步到数据库,语句如下:
python3 manage.py makemigrations
此处若出现’tuple’ object is not callable的错误提示,则说明在数据模型的设计语句中出现了缺少符号或者多符号的问题,需要再回到数据模型中重新检查。

那么紧接着就是如何使用数据库啦:
需要了解的是ORM的大多数操作都在objects的类属性上,常用方法有:
all() : 取出所有数据
filter() : 根据条件过滤出某些数据
exclude() : 根据条件排除某些数据
create() : 创建一个对象
order_by() : 根据某个字段进行增序或者降序排列
count() : 统计取出的数据有多少个
exists() : 检查某条数据是否存在
latest() : 取出最新的一条数据
earliest() : 取出最早的一条数据
first() : 取出第一条数据
last() : 取出最后一条数据
filter 中常用的过滤条件:
过滤出包含在某个列表中的数据: filter(id__in=[123, 555, 231])
过滤出在某个范围内的数据: filter(id__range=[123, 456])
过滤出包含某文本的数据: filter(name__contains=‘123’)
过滤出数值小于等于某值的数据: filter(id__lte=123)
其他的比较过滤条件: gt / gte / lt / lte

发布了21 篇原创文章 · 获赞 1 · 访问量 1568

猜你喜欢

转载自blog.csdn.net/qq_33566628/article/details/88540366