本文已参与「新人创作礼」活动,一起开启掘金创作之路。
一、序言
最近几天在学习Django框架,本以为一天内基本可以撸一遍,没想到却花了我两天的时间。中途踩过一些坑,最大的坑应该是Django的ORM机制,今晚有空来分享一下。
二、创建项目,创建应用
- 如果没有安装Django,用pip安装:
安装指定版本:pip3 install django==1.11.5
安装最新版本:pip3 install django或者pip3 install django
卸载django:pip3 uninstall Django
- 找一个文件目录,创建项目:
django-admin startproject 项目名称
自动生成项目相关文件,项目结构如下:
创建项目
编辑
- 进入项目目录,创建应用:
python3 manage.py startapp 应用名称
自动生成应用的相关文件,应用结构如下:
创建应用
编辑
三、配置相关文件
- 在__init__.py文件中配置数据库:
import pymysql
pymysql.install_as_MySQLdb()
如果没有安装pymysql,则安装:pip install pymysql或者pip3 install pymysql
添加pymysql引擎
编辑
- 在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模型
- 在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选项
- 数据库中的表名称
为了节省时间,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 作为后台数据库时。
五、数据库的同步
- 终端输入指令:python3 manage.py makemigrations
将每个应用下的models.py文件生成一个中间文件并保存在migrations
如果要迁移指定的models.py:python3 manage.py makemigrations + 应用名称
- 终端输入指令:python3 manage.py migrate
将每个应用下的migrations目录中的中间文件同步回数据库
- 迁移数据库成功:
数据库表
编辑