前景:django自带的数据库是sqlite3,这是一种轻量级数据库,一般用于手机中,web项目用的大多数还是mysql,这次做一个项目‘图书-英雄’信息管理
1、在家目录下的Desktop创建一个文件夹,在这个文件夹下创建一个名为pytest1虚拟环境(第一篇已经说过怎么安装虚拟环境)
(1)cd ~/Desktop
(2)mkdir project_1
(3)mkvietualenv -p python3.5 pytest1 #创建虚拟环境
(4)workon pytest1 #进入虚拟环境
(5)pip install django=1.8.2 #在虚拟环境中安装需要的包
(6)django-admin startproject test2 #创建项目test2
(7)cd test2
(8)python manage.py startapp booktest #创建应用booktest,图书信息
(9)将应用与项目关联,修改如下图
2、django框架默认使用sqlite3数据库,如何让他使用MySQL数据库呢?看下图
配置代码:
DATABASES = {
‘default‘: {
‘ENGINE‘: ‘django.db.backends.mysql‘,
‘NAME‘: ‘test2‘, #数据库名字,
‘USER‘: ‘root‘, #数据库登录用户名
‘PASSWORD‘: ‘mysql‘, #数据库登录密码
‘HOST‘: ‘localhost‘, #数据库所在主机
‘PORT‘: ‘3306‘, #数据库端口
}
}
3、上面的配置中,数据库test2在django框架下不会自动创建,所以我们要手动进入MySQL数据库去创建 进入终端 (1)sudo mysql service start #启动mysql (2)mysql -uroot -p密码 #连接mysql (3)create database test2 charset=utf8;#创建test2数据库
4、定义模型类(上一篇讲过)
- 模型类被定义在"应用/models.py"文件中,此例中为"booktest/models.py"文件。
- 模型类必须继承自Model类,位于包django.db.models中。
- 提示:对于重要数据使用逻辑删除。
实例演示:
(1)打开booktest/models.py,定义模型类如下:
from django.db import models #定义图书模型类BookInfo class BookInfo(models.Model): btitle = models.CharField(max_length=20)#图书名称 bpub_date = models.DateField()#发布日期 bread = models.IntegerField(default=0)#阅读量 bcomment = models.IntegerField(default=0)#评论量 isDelete = models.BooleanField(default=False)#逻辑删除 #定义英雄模型类HeroInfo class HeroInfo(models.Model): hname = models.CharField(max_length=20)#英雄姓名 hgender = models.BooleanField(default=True)#英雄性别 isDelete = models.BooleanField(default=False)#逻辑删除 hcomment = models.CharField(max_length=200)#英雄描述信息 hbook = models.ForeignKey(‘BookInfo‘)#英雄与图书表的关系为一对多,所以属性定义在英雄模型类中
(2)生成迁移文件
终端执行命令:python manage,py makemigrations
生成迁移文件的时候出现错误,把数据库切换成了mysql,需要安装pymysql模块之后,Django框架才可以操作mysql数据库。安装命令:pip install pymysql -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com
安装成功之后,在test2/_init_.py文件中加上如下代码:
import pymysql pymysql.install_as_MySQLdb()
然后执行如下命令:
python manage.py makemigrations #生成迁移文件:根据模型类生成创建表的迁移文件
python manage.py migrate #.执行迁移:根据第一步生成的迁移文件在数据库中创建表
(3)进入数据库查看有没有生成表
(4)在数据库命令行中,复制如下语句执行,向booktest_bookinfo表中插入测试数据:
insert into booktest_bookinfo(btitle,bpub_date,bread,bcomment,isDelete) values (‘射雕英雄传‘,‘1980-5-1‘,12,34,0), (‘天龙八部‘,‘1986-7-24‘,36,40,0), (‘笑傲江湖‘,‘1995-12-24‘,20,80,0), (‘雪山飞狐‘,‘1987-11-11‘,58,24,0);
再复制如下语句执行,向booktest_heroinfo表中插入测试数据:
insert into booktest_heroinfo(hname,hgender,hbook_id,hcomment,isDelete) values (‘郭靖‘,1,1,‘降龙十八掌‘,0), (‘黄蓉‘,0,1,‘打狗棍法‘,0), (‘黄药师‘,1,1,‘弹指神通‘,0), (‘欧阳锋‘,1,1,‘蛤蟆功‘,0), (‘梅超风‘,0,1,‘九阴白骨爪‘,0), (‘乔峰‘,1,2,‘降龙十八掌‘,0), (‘段誉‘,1,2,‘六脉神剑‘,0), (‘虚竹‘,1,2,‘天山六阳掌‘,0), (‘王语嫣‘,0,2,‘神仙姐姐‘,0), (‘令狐冲‘,1,3,‘独孤九剑‘,0), (‘任盈盈‘,0,3,‘弹琴‘,0), (‘岳不群‘,1,3,‘华山剑法‘,0), (‘东方不败‘,0,3,‘葵花宝典‘,0), (‘胡斐‘,1,4,‘胡家刀法‘,0), (‘苗若兰‘,0,4,‘黄衣‘,0), (‘程灵素‘,0,4,‘医术‘,0), (‘袁紫衣‘,0,4,‘六合拳‘,0);
原文地址:https://www.cnblogs.com/lz-tester/p/10280248.html