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表中获取数据,而不是从文件中收获。

相关文章