python中web应用和mysql数据库交互

7使用数据库

切实用python的DB-API,这等同段里介绍咋样编写代码和MYSQL数据库技术并行,这里以一个通用的数据库API,名吧DB-API。

7.1基于数据库的web应用

此前大家将日记数据存放于一个文件文件被,不能获悉第六节最先河之呼吁:已经响应了多少只请求?最常用的假名列表是什么?请求来自哪个IP地址?哪个浏览器用之最为多?

临时使用mysql数据库存放日志数据:

  1. 安装mysql服务器。
  2. 呢Python安装一个mysql数据库驱动程序。
  3. 否web应用创设数据库和声明。
  4. 创代码来拍卖这些web应用之数据库及表明。

任务1:安装mysql服务器。

网站:http://dev.mysql.com/downloads/mysql/

决不要选拔新型版本的8.0.12自家收拾了扳平早晨底训诫,grant依照正常艺术开创用户会直接报语法错误。

问问了导师说或许是本子的故,提出下载5.6本子,雷区我曾踏上了

哪怕你未曾就此过mysql,不过没什么,我为接触相比较少(我第一针对oracle了然多片段)

下载后察觉是一个zip文件,这是自的解压路径:

D:\mysql\mysql-5.6.41-winx64

装步骤:https://blog.csdn.net/u012896719/article/details/80428493

安装到位后mysql
-uroot -p新密码(我之密码是112233)

就是进入了mysql>
 quit退出

任务2:为Python安装一个mysql数据库驱动程序。

python解释器对于数据库提供了一个规范数据库API(应用编程接口),称为DB-API,可以就此来处理按照SQL的数据库,还需要一个所以来连续DB-API的驱动程序——oracle提供了一个MYSQL-Connector/python驱动。下来手动安装之令,访问https://dev.mysql.com/downloads/connector/python/

以斯页面接纳在此之前的本最少是2.1.3,将生拉选项改成也Platform
Independent(平台独立):

 图片 1

下载后解压,然后采取管理员打开cmd切换至是目录下输入

py -3 setup.py
install

观看下图的不二法门表达成功:

 图片 2

任务3:为web应用创立数据库及注脚

登录mysql:

mysql -u root
-p112233

开创一个数据库存储日志数据:

create database
vsearchlogDB;

下专门为web应用创立一个数据库用户的ID和口令,以便在mysql交互时选择,而不是直接以根用户root。

grant all on
vsearchlogDB.* to ‘vsearch’ identified by ‘112233’;

退出:quit

 

创立一个表明,字段:短语,字母,IP地址,浏览器和结果值,还得每个请求的唯一ID和记录信息之辰戳。

故而vsearch用户登录数据库

mysql -u vsearch
-p 112233

自家遇见了一个问题,登录不上来,报错error
1045 access denied for user

于是分享一个缓解之方案

https://www.cnblogs.com/summertime-wu/p/7466160.html

 

用创设的数据库

use
vsearchlogdb

创建表

create table
log(

id int
auto_increment primary key,

ts timestamp
default current_timestamp,

phrase
varchar(128) not null,

letters
varchar(32) not null,

ip varchar(16)
not null,

browser_string
varchar(256) not null,

results
varchar(64) not null);

查看表的结构

desc log;

 图片 3

为吃日志的笔录自动进入到者表中,而无是大家输入insert命令一行一行的插入数据,需要以Python和SQL举行互,相应的利用DB-API更多知识。

DB-API

行使她的功利是好轻松替换驱动程序/数据库组合,而只是对Python代码举行充足小的改观。

 

手续1:定义连接属性

接连至mysql需要三单信息:

  l 运行mysql服务器的电脑主机的IP地址/主机名;

  l 用户ID和口令;

  l 这么些用户想要互的多少库名。

驱动程序允许用这么些链接属性放在一个Python字典中,下来当>>>窗口举行测试

dbconfig = {
‘host’: ‘127.0.0.1’,

      ’user’:
‘vsearch’,

       ’password’:
‘112233’,

      ’database’:’vsearchlogdb’,
}

 

手续2:导入数据库驱动程序

>>>
import mysql.connector

导入之后就得应用mysql特定的驱动程序了

 

步骤3:建立及服务器的一个接连

>>> conn
= mysql.connector.connect(**dbconfig)

**晓connect函数用一个变量提供了一个参数字典,在connect函数中动用那些参数来树连接。

 

手续4:打开一个游标

把游标了解为数据库中之文本句柄。

>>>
cursor = conn.cursor()

 

步骤5:完成SQL查询

首先向mysql请求连接数据库的表名,将show
tables查询与至_SQL变量(变量叫作好应用其余),然后调用cursor.execute函数,并传到_SQL作为参数:

>>>
_SQL = “””show tables”””

>>>
cursor.execute(_SQL)

履后SQL查询会发送到SQL服务器执行是查询,不过未会面立马亮,请求才碰面拿走结果。

可应用下列三独主意拿到请结果:

  •    cursor.fetchone获取一行结果。
  •    cursor.fetchmany获取指定的任意行结果。
  •    cursor.fetchall获取有数据举办结果。

 

>>> res
= cursor.fetchall()

>>>
res

[(‘log’,)]

是结果是数据库被的表log(只有马上一个注脚),作为元组去显得()。

更换一个SQL语句询问desc
log:

 图片 4

抱结果吃的各行:

 图片 5

python允许在询问串中放置“数据占位符”,用%s指定

 图片 6

数据库系统会缓存insert,之后再一次同差使用全体底insert,所以发生或现在以select查询不顶数码。需要commit提交,使用conn.commit

 图片 7

数据现已插入

 图片 8

手续6:关闭游标和连续

>>>
cursor.close()

True

>>>
conn.close()

职责4:创设代码处理web应用之数据库和阐明

调整web应用之代码,让它把web请求的数记录及mysql数据库系统被。

 

def log_request(req: 'falsk请求', res: str) -> None:
 dbconfig = { 'host': '127.0.0.1',
    'user': 'vsearch',
     'password': '112233',
     'database':'vsearchlogdb', }
 import mysql.connector
 conn = mysql.connector.connect(**dbconfig)
 cursor = conn.cursor()
 _SQL = """ insert into log 
   (phrase, letters, ip, browser_string, results)
    values 
    (%s, %s, %s, %s, %s)"""
 cursor.execute(_SQL, (req.form['phrase'], 
        req.form['letters'], 
        req.remote_addr, 
        req.user_agent.browser, 
        res, ))
 conn.commit()
 cursor.close()
 conn.close()

测试新的代码

py -3
vsearch_for_web.py

开辟浏览器输入http://127.0.0.1:5000像之前一样测试

而本次/viewlog不能查最新的日志记录,现在底数码以数据库中。

 图片 9

窗口的轻重缓急在菜单栏右键属性中调整。

 

立马同样有的内容已好了,然而弯忘了函数view_the_log,前边会更新是函数让其打数据库的log表中获取数据,而未是打文本中得。

相关文章