python学习 -Django3、连接mysql、映射数据表、数据库连接池

准备四个html静态文件
1.login.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户登录</title>
    <style>
        #container {
            width: 520px;
            margin: 10px auto;
        }
        .input {
            margin: 20px 0;
            width: 460px;
            height: 40px;
        }
        .input>label {
            display: inline-block;
            width: 140px;
            text-align: right;
        }
        .input>img {
            width: 150px;
            vertical-align: middle;
        }
        input[name=captcha] {
            vertical-align: middle;
        }
        form+div {
            margin-top: 20px;
        }
        form+div>a {
            text-decoration: none;
            color: darkcyan;
            font-size: 1.2em;
        }
        .button {
            width: 500px;
            text-align: center;
            margin-top: 20px;
        }
    </style>
</head>
<body>
    <div id="container">
        <h1>用户登录</h1>
        <hr>
        <form action="" method="post">
            <fieldset>
                <legend>用户信息</legend>
                <div class="input">
                    <label>用户名:</label>
                    <input type="text" name="username">
                </div>
                <div class="input">
                    <label>密码:</label>
                    <input type="password" name="password">
                </div>
                <div class="input">
                    <label>验证码:</label>
                    <input type="text" name="captcha">
                    <img src="images/captcha.jpg" alt="" width="150" height="40">
                </div>
            </fieldset>
            <div class="button">
                <input type="submit" value="登录">
                <input type="reset" value="重置">
            </div>
        </form>
        <div>
            <a href="subjects.html">返回首页</a>
            <a href="register.html">注册新用户</a>
        </div>
    </div>
</body>
</html>

2.register.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>用户注册</title>
    <style>
        #container {
            width: 520px;
            margin: 20px auto;
        }
        .input {
            margin: 20px 20px;
            width: 450px;
            height: 40px;
        }
        .input>label {
            display: inline-block;
            width: 150px;
            text-align: right;
        }
        a {
            text-decoration: none;
            color: darkcyan;
        }
        form+div {
            margin-top: 20px;
        }
        form+div>a {
            font-size: 1.2em;
        }
        .button {
            width: 520px;
            margin-top: 10px;
            text-align: center;
        }
        .button>div {
            text-align: left;
            margin: 10px 10px;
        }
    </style>
</head>
<body>
    <div id="container">
        <h1>用户注册</h1>
        <hr>
        <form action="" method="post">
            <fieldset>
                <legend>用户信息</legend>
                <div class="input">
                    <label>用户名:</label>
                    <input type="text" name="username" required minlength="4" maxlength="20">
                </div>
                <div class="input">
                    <label>密码:</label>
                    <input type="password" name="password">
                </div>
                <div class="input mobile">
                    <label>手机号:</label>
                    <input type="tel" name="tel">
                    <input type="button" id="sendBtn" value="发送验证码">
                </div>
                <div class="input">
                    <label>验证码:</label>
                    <input type="text" name="mobilecode">
                </div>
            </fieldset>
            <div class="button">
                <input type="submit" value="注册">
                <input type="reset" value="重置">
                <div>
                    <input type="checkbox">
                    我已经同意网站<a href="">用户协议及隐私政策</a>
                </div>
            </div>
        </form>
        <div>
            <a href="subjects.html">返回首页</a>
            <a href="login.html">返回登录</a>
        </div>
    </div>
</body>
</html>

3.subjects.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>学科信息</title>
    <style>
        #container {
            width: 80%;
            margin: 10px auto;
        }
        .user {
            float: right;
            margin-right: 10px;
        }
        .user>a {
            margin-right: 10px;
        }
        #main>dl>dt {
            font-size: 1.5em;
            font-weight: bold;
        }
        #main>dl>dd {
            font-size: 1.2em;
        }
        a {
            text-decoration: none;
            color: darkcyan;
        }
    </style>
</head>
<body>
    <div id="container">
        <div class="user">
            <a href="login.html">用户登录</a>
            <a href="register.html">快速注册</a>
        </div>
        <h1>北京千锋互联科技有限公司所有学科</h1>
        <hr>
        <div id="main">
            <dl>
                <dt>
                    <a href="teachers.html">Python全栈+人工智能</a>
                    <img src="images/hot-icon-small.png">
                </dt>
                <dd>
                    Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/)是一种广泛使用的解释型、高级编程、通用型编程语言,
                    由吉多·范罗苏姆创造,第一版发布于1991年。可以视之为一种改良(加入一些其他编程语言的优点,如面向对象)的LISP。
                    Python的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进划分代码块,而非使用大括号或者关键词)。
                    相比于C++或Java,Python让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。
                </dd>
            </dl>
            <dl>
                <dt>
                    <a href="">全栈软件测试</a>
                </dt>
                <dd>
                    软件测试在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。
                    软件测试有许多方法,但对复杂的产品运行有效测试不仅仅是研究过程,更是创造并严格遵守某些呆板步骤的大事。
                    测试的其中一个定义:为了评估而质疑产品的过程;这里的“质疑”是测试员试着对产品做的事,而产品以测试者脚本行为反应作为回答。
                </dd>
            </dl>
            <dl>
                <dt>
                    <a href="">JavaEE+分布式开发</a>
                    <img src="images/hot-icon-small.png">
                </dt>
                <dd>
                    Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。
                    该语言由当时任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,
                    目标设置在家用电器等小型系统的编程语言,应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。
                    由于这些智能化家电的市场需求没有预期的高,太阳计算机系统(Sun公司)放弃了该项计划。
                    随着1990年代互联网的发展,Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。
                    Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。
                </dd>
            </dl>
        </div>
    </div>
</body>
</html>

4.teachers.html

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>老师信息</title>
    <style>
        #container {
            width: 80%;
            margin: 10px auto;
        }
        .teacher {
            width: 100%;
            margin: 0 auto;
            padding: 10px 0;
            border-bottom: 1px dashed gray;
            overflow: auto;
        }
        .teacher div {
            float: left;
        }
        .photo {
            height: 140px;
            border-radius: 75px;
            overflow: hidden;
            margin-left: 20px;
        }
        .info {
            width: 75%;
            margin-left: 30px;
        }
        .info div {
            clear: both;
            margin: 5px 10px;
        }
        .info span {
            margin-right: 25px;
        }
        .info a {
            text-decoration: none;
            color: darkcyan;
        }
        .user {
            float: right;
            margin: 10px 10px;
        }
        .user+h1 {
            clear: both;
        }
        #photo {
            border-radius: 32px 32px 32px 32px;
        }
    </style>
</head>
<body>
    <div id="container">
        <h1>Python全栈+人工智能学科的老师信息</h1>
        <hr>
        <div class="teacher">
            <div class="photo">
                <img src="images/luohao.png" height="140" alt="">
            </div>
            <div class="info">
                <div>
                    <span><strong>姓名:骆昊</strong></span>
                    <span>性别:男</span>
                    <span>出生日期:1980年11月28日</span>
                </div>
                <div class="intro">
                    10年以上软硬件产品和系统设计、研发、架构和管理经验,2003年毕业于四川大学,四川大学Java技术俱乐部创始人,
                    四川省优秀大学毕业生,在四川省网络通信技术重点实验室工作期间,参与了2项国家自然科学基金项目、
                    1项中国科学院中长期研究项目和多项四川省科技攻关项目,在国际会议和国内顶级期刊上发表多篇论文(1篇被SCI收录,3篇被EI收录),
                    大规模网络性能测量系统DMC-TS的设计者和开发者,perf-TTCN语言的发明者。国内最大程序员社区CSDN的博客专家,
                    在Github上参与和维护了多个高质量开源项目,精通C/C++、Java、Python、R、Swift、JavaScript等编程语言,
                    擅长OOAD、系统架构、算法设计、协议分析和网络测量,主持和参与过电子政务系统、KPI考核系统、P2P借贷平台等产品的研发,
                    一直践行“用知识创造快乐”的教学理念,善于总结,乐于分享。
                </div>
                <div class="comment">
                    <a href="">好评</a>&nbsp;&nbsp;(<strong>100</strong>)
                    &nbsp;&nbsp;&nbsp;&nbsp;
                    <a href="">差评</a>&nbsp;&nbsp;(<strong>50</strong>)
                </div>
            </div>
        </div>
        <div class="teacher">
            <div class="photo">
                <img src="images/yuting.png" height="140" alt="">
            </div>
            <div class="info">
                <div>
                    <span><strong>姓名:余婷</strong></span>
                    <span>性别:女</span>
                    <span>出生日期:1992年9月20日</span>
                </div>
                <div class="intro">
                    5年以上移动互联网项目开发经验和教学经验,曾担任上市游戏公司高级软件研发工程师和移动端(iOS)技术负责人,
                    参了多个企业级应用和游戏类应用的移动端开发和后台服务器开发,拥有丰富的开发经验和项目管理经验,
                    以个人开发者和协作开发者的身份在苹果的AppStore上发布过多款App。精通Python、C、Objective-C、Swift等开发语言,
                    熟悉iOS原生App开发、RESTful接口设计以及基于Cocos2d-x的游戏开发。授课条理清晰、细致入微,
                    性格活泼开朗、有较强的亲和力,教学过程注重理论和实践的结合,在学员中有良好的口碑。
                </div>
                <div class="comment">
                    <a href="">好评</a>&nbsp;&nbsp;(<strong>50</strong>)
                    &nbsp;&nbsp;&nbsp;&nbsp;
                    <a href="">差评</a>&nbsp;&nbsp;(<strong>100</strong>)
                </div>
            </div>
        </div>
    </div>
</body>
</html>

修改静态HTML文件为模板,为动态页面做准备

在subjuects.html下

    <hr>
    <div id="main">
        {% for subject in subjects %}
        <dl>
            <dt>
                <a href="teachers.html">{{ subject.name }}</a>
                {% if subject.is_hot %}
                <img src="images/hot-icon-small.png">
                {% endif %}
            </dt>
            <dd>{{ subject.intro }}</dd>
        </dl>
        {% endfor %}
    </div>
</div>
</body>
</html>

修改views.py

def  show_subject(request):

	return render(request,'subjects.html',{'subject':[]})

在修改urls.py文件的路径
form polls.views import show_subject
path=['',show_subject]

创建数据库

create database vote default charset utf8;                          -- 创建数据库
create user 'hellokitty'@'%' identified by '密码';         -- 创建用户

grant all privileges on vote.* to 'hellokitty'@'%';                 -- 授权
flush privileges;                                                   -- 刷新权限

use vote;                                           -- 使用vote数据库

create table `tb_subject` 
(`no` int(11) not null auto_increment,        -- 学科编号
  `name` varchar(20) not null,                  -- 学科名称
  `intro` varchar(1000) default '',             -- 学科介绍
  `is_hot` tinyint(1) default '0',              -- 热度是否为真,默认为假
  primary key (`no`)                            -- 设置主键
);

修改Django配置文件setting.py

找到DATABASE这个变量,修改连接mysql的配置
DATABASE = {
 'default':{
    'ENGINE': 'django.db.backends.mysql',
    'NAME': 'vote',
    'HOST':'服务器地址',
    'PORT':3306,
    'USER':'hellokitty',
    'PASSWORD':'数据库密码',
    'CHARSET':'utf8',
    'TIME_ZONE':'Asia/Shanghai'}
}

装连接数据库的依赖项(django兼容mysqlclient,不兼容pymysql) 
!!!装mysqlclient就不需要修改以下内容!!!
如果装pymysql的话得修改文件,在根路径下(这个django项目)文件下找到 __init__.py在里面写代码

import pymysql
pymysql.install_as_MySQLdb()
点击这个方法修改第三方库代码,在120行
def install_as_MySQLdb():
	 global version_info                             #加这个全局声明
	 version_info = (1,4,2,'final',0)                #修改版本号,达到欺骗django的行为
	 sys.modules["MySQLdb"] = sys.modules["_mysql"] = sys.modules["pymysql"]

重启django服务,还是会报错,点击报错文件operations.py点击进去修改146行代码
在 def last_executed_query(self,cursor,sql,parms):下改解码为编码

def last_executed_query(self,cursor,sql,parms)
    query = getattr(cursor, '_executed', None)
    if query is not None:
        query = query.encode(errors='replace') #修改这段代码decode为encode
    return query

在次重启django服务就可以了(项目部署linux上必须用mysqlclient)
----------------------------------------------------------------------------------------------	

在setting.py中修改应用配置39行代码以下列表中加上自己创建的应用名(本文创建为polls)
INSTALLED_APPS = [
		    'django.contrib.admin',
		    'django.contrib.auth',
		    'django.contrib.contenttypes',
		    'django.contrib.sessions',
		    'django.contrib.messages',
		    'django.contrib.staticfiles',
		    'polls'
		]

给polls/models.py中映射数据库的表(吧数据库中的表映射为python中的类,方便开发)

	当前虚拟环境终端中输入:
		python manage.py inspectdb > polls/models.py
		
		类名自动写为TBSubject 、删除掉TB、更为优雅

数据库连接池

安装

pip install django-db-connection-pool

修改Django的配置文件

# change django.db.backends.mysql to dj_db_conn_pool.backends.mysql:
DATABASES = {
    'default': {
        ...
        'ENGINE': 'dj_db_conn_pool.backends.mysql'   #oracle/postgresql
        ...
    }
}

连接池选项

# 方式一:
DATABASES = {
    'default': {
        ...
        'POOL_OPTIONS' : {
            'POOL_SIZE': 10,
            'MAX_OVERFLOW': 10
        }
        ...
     }
 }
# 方式二:
import dj_db_conn_pool
dj_db_conn_pool.setup(pool_size=100, max_overflow=50)

注:
目前连接池限制用户传入的连接池配置为:POOL_SIZE(连接池容量)、MAX_OVERFLOW(连接池容量向上浮动最大值) 这两个参数包含在 POOL_OPTIONS 内,例如下面的配置,default 的连接池常规容量为10个连接,最大浮动10个, 即为:在 default 连接池创建后,随着程序对连接池的请求,连接池内连接将逐步增加到10个,如果在连接池内连接 全部用光后,程序又请求了第11个连接,此时的连接池容量将短暂超过 POOL_SIZE,但最大不超过 POOL_SIZE + MAX_OVERFLOW, 如果程序请求 default 数据库的连接数量超过 POOL_SIZE + MAX_OVERFLOW,那么连接池将一直等待直到程序释放连接, 请注意线程池对数据库连接池的使用,如果线程池大于连接池,且线程无主动释放连接的动作,可能会造成其他线程一直阻塞

查询数据库当前连接数

show status like ‘Threads%’;

在这里插入图片描述
查询数据库当前设置的最大连接数

show variables like ‘%max_connections%’;

可以在/etc/my.cnf里面设置数据库的最大连接数  
max_connections = 500 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

像风一样的男人@

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值