写在开始之前
- Django默认使用SQLite作为默认数据库。如果不熟悉数据库或仅是为了测试,这是最简单的选择,并且Python内置了SQLite,但是,对于准备开始1个真正的项目而言,应该使用1个更具扩展性的数据库。例如:MySQL/PostgreSQL,毕竟中途切换数据库是个令人头疼的问题;
- 除了DB API驱动程序之外,Django还需要一个适配器来从其ORM访问数据库驱动程序。Django为mysqlclient提供了一个适配器,因此你可以不用关心这一点;
- 使用SQLite以外的数据库,必须事先创建数据库。
怎么做?
- 安装MySQL的Python API 驱动程序 # ArchLinux用户 [mu@mu polls]$ sudo pacman -S base-devel #至少安装gcc # CentOS用户 # yum -y install gcc mysql-devel python3X-devel [mu@mu polls]$ sudo pip3 install mysqlclient
- 创建数据库 [mu@mu polls]$ mysql mysql -uroot -p MariaDB [mysql]> CREATE DATABASE django_project CHARACTER SET utf8; #确保默认情况下所有表和列都将使用UTF-8,这是Django所期望的 Query OK, 1 row affected (0.00 sec) MariaDB [mysql]> GRANT ALL PRIVILEGES ON django_project.* TO django@'localhost' IDENTIFIED BY 'guomai'; Query OK, 0 rows affected (0.00 sec) MariaDB [mysql]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec)
- 配置MySQL DB ENGINE及相关键值项 [mu@mu polls]$ vi ../mysite/settings.py #修改DATABASE配置段 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': 'django_project', 'USER': 'django', 'PASSWORD': 'guomai', 'HOST': 'localhost', # 如是在本机,还可以指定UNIX sockets套接字文件,即'/var/run/mysql' 'PORT': '3306', } } #一个值得关注的Tip Django使用MySQL作为后端时,连接设置按此优先级顺序使用: 1. OPTIONS; 2. NAME,USER,PASSWORD, HOST,PORT; 3. MySQL选项文件; 换句话说,如果你设置数据库的名称OPTIONS,这将优先于NAME,它将覆盖MySQL选项文件中的任何内容。 以下是使用MySQL选项文件的示例配置: # settings.py DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'OPTIONS': { 'read_default_file': '/path/to/my.cnf', }, } } # my.cnf [client] database = NAME user = USER password = PASSWORD default-character-set = utf8
- 导入APP [mu@mu polls]$ vi ../mysite/settings.py #修改`INSTALLED_APPS`设置项 INSTALLED_APPS = [ #应用能在多个项目中使用 'polls.apps.PollsConfig', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', ]
- 默认开启的某些应用需要至少一个数据表,所以,在使用他们之前需要在数据库中创建一些表 [mu@mu mysite]$ python3 manage.py migrate #应用ORM创建数据表
- 查看
migrate
为应用创建的数据表。如果通过show tables
能够看到下图所示,意味着以及成功切换Django
的数据库后端为MySQL
。