Django二(MySQL数据库)
来源:互联网 发布:采集卡监控软件 编辑:程序博客网 时间:2024/06/05 21:51
Django模型
在Web应用中,主观逻辑经常涉及到和数据库进行交互。以数据库驱动网站在后台连接数据库服务器,从中取出一些数据,然后在Web页面用漂亮的格式展示这些数据。这个网站也可能会向访问者提供修改数据库的方法,许多复杂的网站都提供了以上两个功能的某种结合。
对于我们的例子:发布会签到系统来说,也是以数据管理为主的网站,数据库表的设计完成就相当于Web系统已经完成一半,可见数据库表的设计难度,以及在Web开发中的重要性。
1)设计系统表
Django提供完善的模型(model)层主要用来创建和存取数据,不需要我们直接对数据库进行操作;
DJango模型基础知识:
每个模型是一个Python类,继承django.db.models.model类,该模型的每个属性表示一个数据库表字段。所有这一切已经自动帮我们生成了数据库访问API ;
打开/sign/models.py 创建表
from
django.db
import
models
# Create your models here.
#发布会表
class
Event(models.Model):
name
=
models.CharField(max_length
=
100
)
#发布会标题
limit
=
models.IntegerField()
#参加人数
status
=
models.BooleanField()
#状态
address
=
models.CharField(max_length
=
200
)
#地址
start_time
=
models.DateTimeField(
'events time'
)
#发布会时间
create_time
=
models.DateTimeField(auto_now
=
True
)
#创建时间(自动获取当前时间)
def
__str__(
self
):
#将对象以str的方式显示出来
return
self
.name
#嘉宾表
class
Guest(models.Model):
event
=
models.ForeignKey(Event)
#关联发布会id
realname
=
models.CharField(max_length
=
64
)
#姓名
phone
=
models.CharField(max_length
=
16
)
#手机号
email
=
models.EmailField()
#邮箱
sign
=
models.BooleanField()
#签到状态
create_time
=
models.DateTimeField(auto_now
=
True
)
#创建时间(自动获取当前时间)
class
Meta:
unique_together
=
(
"event"
,
"phone"
)
#联合主键,id+手机号来做为联合主键
def
__str__(
self
):
#将对象以str的方式显示出来
return
self
.realname
PS:对于产品发布会来说,是一个事件。时间、地点、人物等要素必不可少,在设计数据库表的时候需要围绕着这些要素进行。
关于发布会表(Event类) 和 嘉宾表(Guest类)的每一个字段,在代码中已经做了注释,有些字段的设计需要做一下简单的说明。
首先:发布会表和嘉宾表中默认都会生成自增id,而我们在创建模型时不需要声明该字段。
其次:发布会表中增加了status字段用于表示发布会的状态是否开启,用于控制该发布会是否可用。
紧接:嘉宾表中通过event_id关联发布会表,一条嘉宾信息一定属于某一场发布会。
最后:对于一场发布会来说,一般会选择手机号作为一个嘉宾的验证信息,所以对于一场发布会来说,手机号必须是唯一,除了嘉宾id外,这里提供发布会id+手机号来做为联合主键。
__str__()方法告诉Python如何将对象以str的方式显示出来,所以为每个模型类添加了__str__()方法。
Django数据类型:
进行数据库迁移
cmd.exe
..guest>python manage.py makemigrations sign
..guest>python manage.py migrate
2) admin后台管理
通过Admin后台管理创建的【发布会和嘉宾表】
.../sign/admin.py
from
django.contrib
import
admin
from
sign.models
import
Event,Guest
# Register your models here.
admin.site.register(Event)
admin.site.register(Guest)
登录admin后台:http://127.0.0.1:8001/admin/
点击【Add】添加一条发布会(Event)数据
PS:只显示了发布会名称,如何才能显示表中更多字段?
修改 admin.py
from
django.contrib
import
admin
from
sign.models
import
Event,Guest
# Register your models here.
class
EventAdmin(admin.ModelAdmin):
#EventAdmin类继承django.contrib.admin.ModelAdmin类,保存一个类的自定义配置,这里选择自定义list_display是字段名称列表,
#用于定义要在列表中显示那些字段,当然这些字段必须是在模型Event()类定义
list_display
=
[
'name'
,
'status'
,
'start_time'
,
'id'
]
class
GuestAdmin(admin.ModelAdmin):
list_display
=
[
'realname'
,
'phone'
,
'email'
,
'sign'
,
'create_time'
,
'event'
]
admin.site.register(Event,EventAdmin)
admin.site.register(Guest,GuestAdmin)
保存代码后,重新刷新Event列表
接下来,点击Add添加一条嘉宾(Guest)数据:
3)生成搜索栏和过滤器
from
django.contrib
import
admin
from
sign.models
import
Event,Guest
# Register your models here.
class
EventAdmin(admin.ModelAdmin):
#EventAdmin类继承django.contrib.admin.ModelAdmin类,保存一个类的自定义配置,这里选择自定义list_display是字段名称列表,
#用于定义要在列表中显示那些字段,当然这些字段必须是在模型Event()类定义
list_display
=
[
'name'
,
'status'
,
'start_time'
,
'id'
]
search_fields
=
[
'name'
]
#搜索栏
list_filter
=
[
'status'
]
#过滤器
class
GuestAdmin(admin.ModelAdmin):
list_display
=
[
'realname'
,
'phone'
,
'email'
,
'sign'
,
'create_time'
,
'event'
]
search_fields
=
[
'realname'
,
'phone'
]
#搜索栏,search_fields用于创建表字段的搜索器,可以设置搜索关键字匹配多个表字段
list_filter
=
[
'sign'
]
#过滤器list_filter用于创建字段过滤器
admin.site.register(Event,EventAdmin)
admin.site.register(Guest,GuestAdmin)
查看Event列表与Guest列表
PS: search_fields用于创建表字段的搜索器,可以设置搜索关键字匹配多个表字段。
list_filter用于创建字段过滤器。
4)SQLite管理工具
可视化的SQL工具可以方便管理数据库,两种常用的SQLite管理工具:
4.1)SQLiteManager
Firefox浏览器插件库中搜索SQLiteManager ,打开Firefox浏览器菜单栏--->工具--->附加组件--->搜索SQLiteManager安装,并重启浏览器--->菜单栏【工具】下拉菜单中选择SQLiteManager ;
4.2)SQLiteStudio
SQLiteStudio是一款SQLite数据库可视化工具,是使用SQLite数据库开发应用的必备软件,无需安装下载解压即可使用。
下载地址:https://sqlitestudio.pl/index.rvt?act=download
4.3)配置MySQL
前面用的数据库是Python自带的SQLite3,这种数据库并不适用大型的项目,Django还支持一下几种数据库:
- PostgreSQL (http://www.postgresql.org/)
- MySQL (http://www.mysql.com/)
- Oracle (http://www.oracle.com/)
已MySQL为例:
下载MySQL:http://dev.mysql.com/downloads/mysql/
进入mysql
在Windows命令提示符下进入MySQL
cmd.exe
c:\Users>mysql -u root -p
Enter password: ********
登录用户名为root,密码在安装过程中设置,如果没有填写默认为空
mysql基本操作
查看库与表:
#查看当前数据库下面的所有库:
mysql>show databases;
mysql> use test; #切换到test库
mysql> show tables; #查看test库下面的表
查看mysql端口号:
mysql> show global variables like 'port' ;
创建数据库:
mysql> CREATE DATABASE guest CHARACTER SET utf8;
4.4)、安装PyMySQL
cmd.exe
4.5)、Django配置MySQL
../guest/settings.py 文件中修改数据库相关配置
WSGI_APPLICATION
=
'guest.wsgi.application'
# Database
# https://docs.djangoproject.com/en/1.10/ref/settings/#databases
#
# DATABASES = {
# 'default': {
# 'ENGINE': 'django.db.backends.sqlite3',
# 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
# }
# }
DATABASES
=
{
'default'
: {
'ENGINE'
:
'django.db.backends.mysql'
,
'HOST'
:
'127.0.0.1'
,
'PORT'
:
'3306'
,
'NAME'
:
'guest'
,
'USER'
:
'tian'
,
'PASSWORD'
:
'123456'
,
'OPTIONS'
:{
'init_command'
:
"SET sql_mode='STRICT_TRANS_TABLES'"
,
},
}
}
PS: 1、注释原来的DATABASES,重新添加;
2、配置信息从上到下依次驱动(ENGINE),主机地址(HOST),端口号(PORT),数据库(NAME),登录用户名(USER),登录密码(PASSWORD)
注意:切换数据库后,之前Sqlite3数据库里的数据并不能复制到MySQL中,所有需要重新进行数据库同步,使数据模型重新在MySQL数据库中生成表。
cmd.exe
D:\Py_django\guest>python manage.py migrate
报错了,这是因为Django在连接MySQL数据库时默认使用的是MySqldb驱动,然而我们没有安装该驱动,因为它并不支持Python3,我们现在安装的是PyMySQL驱动,如何让当前的Django通过PyMySQL来连接MySQL数据库?
在 /guest/__init_.py目录下添加:
__init__.py
import
pymysql
pymysql.install_as_MySQLdb()
重新执行数据库同步
另外,因为更换了数据库,所以Admin后台超级管理员账号(admin)也需要重新创建
cmd.exe
D:\Py_django\guest>python manage.py createsuperus
Username (leave blank to use
'administrator'
): ad
Email address: admin@mail.com
Password:
Password (again):
Superuser created successfully.
4.6)MySQL管理工具
MySQL的管理工具很多,与IED工具的选择医院,根据个人习惯选择。最常用的应该是Navicat了,Navicat是一个很强大的MySQL数据库管理和开发工具。
另外一个数据库管理工具SQLyog
- Django二(MySQL数据库)
- django学习笔记(二)——mysql数据库
- python——django使用mysql数据库(二)
- Django同步数据库(Mysql)
- Django使用mysql数据库
- Django使用MySQL数据库
- Django连接MySQL数据库
- Django配置Mysql数据库
- django 链接 mysql数据库
- Django使用mysql数据库
- django+ mysql 数据库建立
- Django使用MySQL数据库
- Django-使用MySQL数据库
- Django应用mysql数据库
- django连接mysql数据库
- django配置mysql数据库
- Django mysql数据库支持
- django使用mysql数据库
- 安卓百分百布局的使用
- 【Qarth框架系列】环境配置
- Spring Boot构建应用
- Windows环境下python2.7安装mysql-python
- 在Sublime Text中配置Python环境
- Django二(MySQL数据库)
- 用数据分析验证,王者荣耀完胜阴阳师,小学生才是最终的赢家
- ZOJ--1067:Color Me Less
- Ubuntu上Nginx+Django的部署
- Java中Date与Calendar小究以及应用Gregoriancalendar类实现简单的日历
- 【Netty基础】protobuf详解
- (四)Tensorboard学习——mnist_with_summaries.py
- Unity 2048数字控件Num的代码实现
- html中<a>标签的使用方法 设置锚点导航.发邮件.打电话......