Pymysql:就是一个python程序连接数据库的第三方包,需要下载才能导入功能,并使用其包含的方法

一、下载

第一步:首先打开python编译器pycharm,再点击terminal终端窗口

第二步:输入pip3 install pymysql -i Simple Index

第三步:看到Successfully字样,即安装成功

二、操作数据库的步骤

1、导入pymysql包

import pymysql

2、连接数据库

con = pymysql.connect(host='localhost', user='root', password='admin', database='demo_07_04', charset='utf8')

这几个参数的含义:

  • host:你要访问的数据库的IP地址
  • user:数据库的用户名
  • password:数据库的密码
  • database:你要访问的数据库名
  • charset:编码格式,为了可以识别中文,一般情况下编码格式为utf8
  • autocommit:提交参数(两种状态)
  • True:自动提交
  • False:手动提交(默认值)

当写到这里的时候,可以运行一下,如果连接成功,会获得一个链接对象,如果连接失败,会抛出异常。

注意:还需要通过连接对象,创建一个cursor游标对象,游标分为两种类型

  • 元组类型游标---》默认值
cur = con.cursor()
  • 字典类型游标
  • 方式一
  • cur = con.cursor(cursor=pymysql.cursors.DictCursor)
  • 方式二:直接在connect方法中设置
  • cursorclass=pymysql.cursors.DictCursor

3、操作数据(增删改查)

execute()函数:用来执行sql语句,返回一个int类型的数量

num = cur.execute('sql语句')

注意:增删改查四种操作中,num含义不同

  • 增删改
  • num表示的是影响行数,还需要commit()手动提交 con.commit()
  • num表示的是查询的数量
  • fetchone()函数:获得一条数据,以元组类型返回
  • fetchall()函数:获得所有数据,以元组嵌套的方式返回

4、关闭连接、数据库

注意:要先关闭游标,在关闭连接


cur.close() con.close()


三、事务的使用

事务的存在是为了保证数据的完整性,安全性,修改数据的时候要么同时成功、要么同时失败

  • commit():提交数据
  • rollbak():回滚数据

对于有异常的sql语句,需要用try、except包围

try:
    异常sql语句
    con.commit()
except Exception as 取别名:
    con.rollback()
    输出异常

四、with优化文件操作

import pymysql


class DB(object):

    def __init__(self, host='localhost', user='root', password='admin', database='', charset='utf8'):
        # 连接数据库,初始化
        self.con = pymysql.connect(
            host=host, user=user, password=password, database=database, charset=charset
        )
        # 通过连接对象,创建一个cursor游标对象
        self.cur = self.con.cursor()

    # 当使用with语法糖的时候,自动调用该方法,并返回当前游标对象
    def __enter__(self):
        return self.cur

    # 退出with语法糖的时候,会调用这个方法
    def __exit__(self, exc_type, exc_val, exc_tb):
        self.con.commit()  # 在关闭连接前先提交
        self.cur.close()
        self.con.close()


if __name__ == '__main__':
    with DB(database='demo_07_04') as db:
        num = db.execute("select * from userinfo")

        for userid, userName, passWord in db:
            print(userid, userName, passWord)

运行结果如下:

python 导入appium python 导入数据库_python

五、注入式攻击

python 导入appium python 导入数据库_mysql_02

上图出现了注入式攻击,任意输入用户名,再像如图所示输入密码,就会登陆成功。

如何解决注入式攻击呢?

把sql语句中,动态添加的数据用一个占位符%s来替代就可以解决上述问题

db.execute("select * from userinfo where userName = %s and userPsw = %s", (数据1,数据2))

# 案例
sql = f"select * from userinfo where userName = %s and userPsw = %s"
num = curr.execute(sql, (uN, uP))  # num获得的是数据的条数 如果你输入正确了 这个num至少是1 查不到这个账号num = 0
if num != 0:
    print(f'欢迎回来,{uN}')
else:
    print('用户名或密码错误,请检查你的账号和密码...')

本人经验不足,如有写的不对不好的地方,欢迎评论区留言指出。