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

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




    
    用户登录
    


    

用户登录


用户信息

2.register.html




    
    用户注册
    


    

用户注册


用户信息
我已经同意网站用户协议及隐私政策

3.subjects.html




    
    学科信息
    


    

北京千锋互联科技有限公司所有学科


Python全栈+人工智能
Python(英国发音:/ˈpaɪθən/ 美国发音:/ˈpaɪθɑːn/)是一种广泛使用的解释型、高级编程、通用型编程语言, 由吉多·范罗苏姆创造,第一版发布于1991年。可以视之为一种改良(加入一些其他编程语言的优点,如面向对象)的LISP。 Python的设计哲学强调代码的可读性和简洁的语法(尤其是使用空格缩进划分代码块,而非使用大括号或者关键词)。 相比于C++或Java,Python让开发者能够用更少的代码表达想法。不管是小型还是大型程序,该语言都试图让程序的结构清晰明了。
全栈软件测试
软件测试在规定的条件下对程序进行操作,以发现程序错误,衡量软件质量,并对其是否能满足设计要求进行评估的过程。 软件测试有许多方法,但对复杂的产品运行有效测试不仅仅是研究过程,更是创造并严格遵守某些呆板步骤的大事。 测试的其中一个定义:为了评估而质疑产品的过程;这里的“质疑”是测试员试着对产品做的事,而产品以测试者脚本行为反应作为回答。
JavaEE+分布式开发
Java是一种广泛使用的计算机编程语言,拥有跨平台、面向对象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。 该语言由当时任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak, 目标设置在家用电器等小型系统的编程语言,应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。 由于这些智能化家电的市场需求没有预期的高,太阳计算机系统(Sun公司)放弃了该项计划。 随着1990年代互联网的发展,Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。 Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

4.teachers.html




    
    老师信息
    


    

Python全栈+人工智能学科的老师信息


姓名:骆昊 性别:男 出生日期:1980年11月28日
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借贷平台等产品的研发, 一直践行“用知识创造快乐”的教学理念,善于总结,乐于分享。
好评  (100)      差评  (50)
姓名:余婷 性别:女 出生日期:1992年9月20日
5年以上移动互联网项目开发经验和教学经验,曾担任上市游戏公司高级软件研发工程师和移动端(iOS)技术负责人, 参了多个企业级应用和游戏类应用的移动端开发和后台服务器开发,拥有丰富的开发经验和项目管理经验, 以个人开发者和协作开发者的身份在苹果的AppStore上发布过多款App。精通Python、C、Objective-C、Swift等开发语言, 熟悉iOS原生App开发、RESTful接口设计以及基于Cocos2d-x的游戏开发。授课条理清晰、细致入微, 性格活泼开朗、有较强的亲和力,教学过程注重理论和实践的结合,在学员中有良好的口碑。
好评  (50)      差评  (100)

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

在subjuects.html下

    
{% for subject in subjects %}
{{ subject.name }} {% if subject.is_hot %} {% endif %}
{{ subject.intro }}
{% endfor %}

修改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%’;

python学习 -Django学习3、连接mysql、映射数据表、数据库连接池_第1张图片
查询数据库当前设置的最大连接数

show variables like ‘%max_connections%’;

可以在/etc/my.cnf里面设置数据库的最大连接数  
max_connections = 500 

你可能感兴趣的:(mysql,python,django)