Django连接MySQL数据库

482 阅读1分钟

本文已参与「新人创作礼」活动,一起开启掘金创作之路。 ​

 一、序言

最近几天在学习Django框架,本以为一天内基本可以撸一遍,没想到却花了我两天的时间。中途踩过一些坑,最大的坑应该是Django的ORM机制,今晚有空来分享一下。

二、创建项目,创建应用

  1. 如果没有安装Django,用pip安装:

安装指定版本:pip3 install django==1.11.5

安装最新版本:pip3 install django或者pip3 install django

卸载django:pip3 uninstall Django

  1. 找一个文件目录,创建项目:

            django-admin startproject 项目名称

            自动生成项目相关文件,项目结构如下:

创建项目

编辑

  1. 进入项目目录,创建应用:

python3 manage.py startapp 应用名称

自动生成应用的相关文件,应用结构如下:

创建应用

编辑

三、配置相关文件

  1. 在__init__.py文件中配置数据库:

import pymysql
pymysql.install_as_MySQLdb()

如果没有安装pymysql,则安装:pip install pymysql或者pip3 install pymysql

添加pymysql引擎

编辑

  1. 在settings.py中配置数据库
DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.mysql',
        'NAME': 'fishasso',
        'USER':'root',
        'PASSWORD':'123456',
        'HOST':'localhost',
        'PORT':'3306'
    }
}

注意:

ENGINE:默认的为sqlite3,这里修改为mysql

NAME:数据库名

USER:数据库账户

PASSWORD:数据库密码

HOST:默认为localhost当前主机,如果数据库在远程服务器上,也可以填写目标服务器的ip地址

PORT:mysql数据库默认端口3306

四、创建models模型

  1. 在app1应用中的models.py中定义models模型类:
class Visitors(models.Model):
    user_id = models.CharField('用户id',max_length=64,null=False,primary_key=True,unique=True)
    mac_address = models.CharField('mac地址',max_length=64,null=False)
    member_level = models.IntegerField('用户等级',null=False,default=1)
    community_low = models.IntegerField('初级鱼塘',null=False,default=1)
    community_middle = models.IntegerField('中级鱼塘',null=False,default=0)
    community_height = models.IntegerField('高级鱼塘',null=False,default=0)

    def __str__(self):
        return self.user_id

    class Meta:
        # 定义该 model 在数据中的表名称:
        # db_table = 'visitors'

        db_table = 'visitors'

注意:这个巨坑,瞬间让我掉了好几根头发

还好有前辈指定:参考django model Meta选项

  1. 数据库中的表名称

为了节省时间,Django 会自动的使用你的 model class 的名称和包含这个 model 的 app 名称来构建数据库的表名称。

如果你有一个 app 叫做 bookstore (使用 manage.py startapp bookstore 创建应用),以 及定义一个 model 为 class Book, 这样将会创建一个名为 bookstore_book 的数据库表。

如果想自定义数据库的表名称,需要在 class Meta 使用 db_table 参数来自定义。

如果你的数据库表名称是一个SQL保留字,或者它包含不允许出现在 Python 变量中的字符 (比如连字符)这是没问题的。因为 Django 会自动给列名和表名添加引号。

在 MySQL 中使用小写字母作为数据库表名称

强烈建议你在通过 db_table 重载数据库表名称时,使用小写字母,特别是当你在使用 MySQL 作为后台数据库时。

五、数据库的同步

  1. 终端输入指令:python3 manage.py makemigrations

将每个应用下的models.py文件生成一个中间文件并保存在migrations

如果要迁移指定的models.py:python3 manage.py makemigrations + 应用名称

  1. 终端输入指令:python3 manage.py migrate

将每个应用下的migrations目录中的中间文件同步回数据库

  1. 迁移数据库成功:

数据库表

编辑