django-数据库[ 配置 ]
django中关于数据库的配置
os:mac, django1.9.5, python3.5
database:mysql
0.背景
django内置的database如下:
要注意的是无论选择使用哪个数据库服务器,都必须下载和安装对应的数据库适配器
设置 | 数据库 | 适配器 |
---|---|---|
postgresql | PostgreSQL | psycopg 版本 1.x |
postgresql_psycopg2 | PostgreSQL | psycopg 版本 2.x |
mysql | MySQL | MySQLdb |
sqlite3 | SQLite | Python 2.5+ 内建 |
oracle | Oracle | cx_Oracle |
1.安装
我们选择mysql作为数据库服务器
因为MySQLdb并不支持Python3.5,所以需要安装pymysql,作为django操作mysql的适配器。
当然会有相应的小代价,在配置中会提到。
pip install pymysql
2.配置
django中默认的数据库为sqlite3,即新建项目后配置文件(settings.py)中关于数据库的初始配置如下:
1 DATABASES = { 2 \'default\': { 3 \'ENGINE\': \'django.db.backends.sqlite3\', 4 \'NAME\': os.path.join(BASE_DIR, \'db.sqlite3\'), 5 } 6 }
2.1 创建数据库
首先,登录mysql,创建数据库mall
create database mall default charset=utf8;
2.2 给数据库创建用户
然后,将数据库mall的所有权限分配给用户rinka,密码为rinka0414
grant all privileges on mall.* to \'rinka\'@\'localhost\' identified by \'rinka0414\';
2.3 配置
最后在django中将配置改为:
1 DATABASES = { 2 \'default\': { 3 \'ENGINE\': \'django.db.backends.mysql\', 4 \'NAME\': \'mall\', 5 \'USER\': \'rinka\', 6 \'PASSWORD\': \'rinka0414\', 7 \'HOST\': \'localhost\', 8 \'PORT\': \'3306\', 9 } 10 }
其中:
DATABASE_ENGINE 即为“背景”中所提到的那些数据库服务器
DATABASE_NAME 将数据库名称告知 django
DATABASE_USER 告诉 django 用哪个用户连接数据库
DATABASE_PASSWORD 告诉django连接用户的密码
DATABASE_HOST 告诉 django 连接哪一台主机的数据库服务器
DATABASE_PORT 告诉 django 连接数据库时使用哪个端口
2.4 小代价
最最后一步,记得在项目同名文件夹下的__init.py__中,加入:
1 import pymysql 2 pymysql.install_as_MySQLdb()
否则会报错:
django.core.exceptions.ImproperlyConfigured: Error loading MySQLdb module: No module named \'MySQLdb\'
3.运行
python manage.py runserver
能成功运行项目不报错,就说明数据库成功连接好啦
总结
django中的数据库配置:
1.选择一个数据库服务器
2.下载安装相应的适配器
3.创建数据库
4.在django的配置文件中配置数据库
p.p1 { margin: 0; font: 11px Menlo }
p.p2 { margin: 0; font: 11px Menlo; color: rgba(39, 42, 216, 1) }
span.s1 { font-variant-ligatures: no-common-ligatures }
span.s2 { font-variant-ligatures: no-common-ligatures; color: rgba(0, 0, 0, 1) }
span.s3 { font-variant-ligatures: no-common-ligatures; color: rgba(39, 42, 216, 1) }
p.p1 { margin: 0; font: 11px Menlo }
span.s1 { font-variant-ligatures: no-common-ligatures }