Django - 数据库配置和ORM机制

首先在setting里面会配置好数据库的信息:这里默认的是使用sqlite3的数据库

1
2
3
4
5
6
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}

Python支持这些引擎,详情见: https://docs.djangoproject.com/en/3.0/ref/settings/#databases

  • ‘django.db.backends.postgresql’
  • ‘django.db.backends.mysql’
  • ‘django.db.backends.sqlite3’
  • ‘django.db.backends.oracle’

切换成MySQL数据库

首先需要安装MySQL的python驱动库。这里使用mysqlclient

1
pip install mysqlclient

然后需要在setting里面更改数据库引擎和配置。

1
2
3
4
5
6
7
8
9
10
11
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'NAME': 'blog_project',
'USER': 'root',
'PASSWORD': '12345678',
# 这里可选配置
# 'HOST': '127.0.0.1',
# 'PORT': '5432',
}
}

然后利用Navicat连接数据库,之后创建数据库。

接下来进行表单同步:

1
2
python manage.py makemigrations
python manage.py migrate

同步表单后就可以看到表单数据了。

ORM机制

对象关系映射(英语:Object Relational Mapping,简称ORM),用于实现面向对象编程语言里不同类型系统的数据之间的转换.换句说,就是用面向对象的方式去操作数据库的创建表,增加、修改、删除、查询等操作

比如: 可以在QuerySet中调用query属性

views.py中:

1
2
3
4
def index(request):
user_list = User.Objects.all()
print(user_list.query)
return render(request, "blog/index.html", {"user": user_list})

这样会得到一套sql语句,然后再Navicat中查询一下query(询问)

1
2
SELECT `auth_user`.`id`, `auth_user`.`password`, `auth_user`.`last_login`, `auth_user`.`is_superuser`, `auth_user`.`username`, `auth_user`.`first_name`, `auth_user`.`last_name`, `auth_user`.`email`, `auth_user`.`is_staff`, `auth_user`.`is_active`, `auth_user`.`date_joined` FROM `auth_user`

查询结果

ORM优缺点

  1. ORM使得我们通过数据库交互变的简单易行,并且完全不用考虑该死的SQL语句,快速开发,由此而来

  2. 可以避免一些你搜程序猿写sql语句带来的性能和效率问题

缺点:

  1. 性能有所牺牲。不过现在的各种ORM框架都在尝试使用各种方法来减轻这个问题(LazyLoad,Cache),效果还是很显著的

  2. 对于个别复杂查询,ORM仍然力不从心。为了 解决这个问题,ORM框架一般也提供了直接原生sql的方式