欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Django数据库配置

程序员文章站 2022-06-05 17:29:53
...

数据库配置

数据库配置是选择项目所使用的数据类型,不同的数据库需要设置不同的数据库引擎,数据库引擎实现项目于与数据库的连接。Django提供4种数据库引擎。

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

项目创建时默认使用Sqlite3数据库,这是一款轻型的数据库,常用于嵌入式系统开发,且占用资源非常少。Sqlite3数据库配置信息如下:

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

1.1、 mysqlclient连接MySql

由于mysqldb不支持Python3,因此Django2.0以上版本不再使用mysqldb作为MySql的连接模块,而选择mysqlclient模块,但两者之间在使用上并没有太大的差异。
在配置MySQL之前,需要安装mysqlclient模块。使用pip install mysqlclient即可。
项目的配置文件setting.py中配置MySQL数据库连接信息,代码如下:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'django_db',
        'USER':'root',
        'PASSWORD':'123456',
        'HOST':'127.0.0.1',
        'PORT':'3306'
    }
}

为了验证数据库连接信息是否正确,在PyCharm的Terminal界面下输入Django操作指令python manage.py migrate来创建Django内置功能的数据表,能到自己建立的数据库中查找到这些数据表,则表示数据库连接正确!

1.2、pymysql连接MySQL

除了使用mysqlclient模块连接MySQL之外,还可以使用pymysql模块连接MySQL数据库。pymysql模块安装使用pip在线安装即可,pymysql模块安装成功后,项目配置文件settings.py的数据库配置信息无需修改,只要在MyDjango文件夹__init__.py中设置数据库连接模块即可,代码如下:

import pymysql
pymysql.install_as_MySQLdb()

验证的方法与mysqlclient连接MySql一样。值得注意的是,若MySQL是8.0以上版本,在Django连接MySQL数据库时会提示django.db.utils.OperationalError的错误信息,这是因为MySQL8.0版本的密码加密方式发生了改变,8.0版本的用户密码采用的是CHA2加密方式。为了解决这个问题,通过SQL语句将8.0的加密方式改回原来的加密方式,在MySQL的可视化工具中运行以下SQL语句:

# newpassword 是已设置的用户密码
ALERT USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'newpassword';
FLUSH PRIVILEGES;

Django除了支持PostgreSQL、SQLite3、MySQL和Oracle之外,还支持SQL Server和MongoDB的连接。

1.3 多个数据库的连接方式

在一个项目中可能需要使用多个数据库才能满足开发需求,特别对于数据量过大的系统,单个数据库存储的数据越多就会使服务器负载越大,因此会将数据划分多个数据库服务器共同存储。

#数据库配置
DATABASES = {
   'default': {
          'ENGINE': 'django.db.backends.mysql', #数据库引擎
          'NAME': 'pythondms',                       #数据库名
          'USER': 'root',                       #用户名
          'PASSWORD': '',                   #密码
          'HOST': '36.103.245.29',                           #数据库主机,默认为localhost
          'PORT': '3306',                           #数据库端口,MySQL默认为3306
          'OPTIONS': {
             'autocommit': True,
         }
    },
    'default1': {
          'ENGINE': 'django.db.backends.mysql', #数据库引擎
          'NAME': 'pythondms',                       #数据库名
          'USER': 'root',                       #用户名
          'PASSWORD': '',                   #密码
          'HOST': '39.107.35.95',                           #数据库主机,默认为localhost
          'PORT': '3306',                           #数据库端口,MySQL默认为3306
          'OPTIONS': {
             'autocommit': True,
         }
    }
}

项目中连接了多个数据库,则数据库之间的使用需要遵从一定的规则和设置。比如项目中定义了多个模型,每个模型所对应的数据表可以选择在某个数据库中生成,如果模型没有指向某个数据库,模型就会在key为default的数据库中生成。

相关标签: Django2.2