Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置
数据库配置
django默认支持sqlite,mysql, oracle,postgresql数据库。
1,django默认使用sqlite的数据库,默认自带sqlite的数据库驱动
引擎名称:django.db.backends.sqlite3
在全局配置文件settings.py可以看到确认配置使用的sqlite数据库
# Database
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases
# 默认配置使用的sqlite数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3', #配置数据库引擎名称
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), #生成数据库到当前的项目文件夹里
}
}
所以我们首次运行程序时会在目录生成db.sqlite3数据库
2,MySQL数据库【重点】
mysql驱动程序
MySQLdb(mysql python)
mysqlclient
MySQL
PyMySQL(纯python的mysql驱动程序)
在django的项目中会默认使用sqlite数据库,如果要使用MySQL数据库需要重新配置MySQL数据库信息,将sqlite数据库注释掉
在settings.py配置MySQL数据库信息
#MySQL数据库
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql', #配置数据库引擎名称
'NAME': 'jxiou', #数据库名称
'USER': 'root', #数据库用户名
'PASSWORD': '279819', #数据库密码
'HOST': '127.0.0.1', #数据库链接地址
'PORT': '3306', #数据库端口
}
}
注意:NAME即数据库的名字,在mysql连接前该数据库必须已经创建,而上面的sqlite数据库下的db.sqlite3则是项目自动创建
USER和PASSWORD分别是数据库的用户名和密码。
设置完后,再启动我们的Django项目前,需要激活我们的mysql。
然后,启动项目,会报错:no module named MySQLdb
这是因为django默认你导入的驱动是MySQLdb,可是MySQLdb对于py3有很大问题,所以我们需要的驱动是PyMySQL
所以,我们只需要找到项目里的全局配置里的__init__,py配置数据库驱动
在里面写入:
import pymysql
pymysql.install_as_MySQLdb()
此时django框架连接MySQL数据库配置好了
给PyCharm安装MySQL数据库管理插件
配置数据库信息
下载数据库管理插件
django创建数据库表
在操作数据库表之前,首先检查一下全局配置文件settings.py里的数据库表操作配置里是否配置了应用路径,如果没有需要加入应用路径
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'app1',
]
配置好了我们开始创建表
对数据库表的操作都是由django下db模块的models对象来操作的,所以需要导入这个对象
注意:一张表对应一个类
首先要创建一个类来操作一张表,而这个类必须继承models.Model对象
注意创建表之前,必须要先创建好数据库
from __future__ import unicode_literals
from django.db import models #导入models对象
class userinfo(models.Model): #创建类必须继承models.Model,类名将是在数据库里的表名称
#不设置主键id将自动创建
anem = models.CharField("用户名",max_length=50) #设置一个anem名称的字符串字段,最大长度50位,在django后台显示名称为:用户名
address = models.CharField("地址", max_length=50)
city = models.CharField('城市', max_length=60)
country = models.CharField(max_length=50)
class Meta:
verbose_name = '用户表' #设置表名称在django后台显示的中文名称
verbose_name_plural = verbose_name
def __str__(self): #设置在django后台显示字段名称
return self.anem
设置好操作表的类后,我们需要生成表,生成表需要在PyCharm的终端输入命令,先输入 makemigrations 然后在输入 migrate 来生成表
此时表就生成了
注意:我们已经生成了需要的表,也包含我们自定义的userinfo表,此时数据库里的django_migrations表记录了,我们生成表时的信息,
如果我们将我们的userinfo表,删除后,在执行命令重建我们的userinfo表,将无法生成,因为django_migrations表记录了你已经生成了
解决方法:
现将项目里migrations目录下的缓存删除
在重新执行命令,makemigrations 然后在输入 migrate 来生成表,会提示你已经生成了这个表
我们打开django_migrations表里找到,与现在migrations目录下缓存名称相同的记录</