为了使python连接上数据库,你需要一个驱动,这个驱动是用于与数据库交互的库。PyMySQL : 这是一个使Python连接到MySQL的库,它是一个纯Python库(文件夹)。PyMySQL 是一个纯 Python 实现的 MySQL 客户端操作库,支持事务、存取过程、批量执行,实现增删改查等。
PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2 中则使用 mysqldb。PyMySQL 遵循 Python 数据库 API v2.0 规范,并包含了 pure-Python MySQL 客户端库。1.命令行输入(下载模块 pymysql)pip3 install pymysql
切换下载的源(仓库)pip3 install pymysql -i 源地址下载第三方模块的方式import pymysql# 创建链接conn = pymysql.connect( # 赋值给 conn连接对象 host='127.0.0.1', # 本地回环地址 port=3306, # 默认端口 user='root', # 用户名 password='123', # 密码 database='db_01', # 连接数据库名称 charset='utf8' # 编码 不能写utf-8)# 生成一个游标对象(相当于cmd打开mysql中的 mysql>)cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典# 定义SQL语句sql = 'select * from egg'# 执行SQL语句cursor.execute(sql)# 获取返回结果res = cursor.fetchall()print(res)
import pymysql# 创建链接conn = pymysql.connect( # 赋值给 conn连接对象 host='127.0.0.1', # 本地回环地址 port=3306, # 默认端口 user='root', # 用户名 password='123', # 密码 database='db_01', # 连接数据库名称 charset='utf8' # 编码 不能写utf-8)# 生成一个游标对象(相当于cmd打开mysql中的 mysql>)cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典# 定义SQL语句sql = 'select * from egg'# 执行SQL语句ret = cursor.execute(sql)print(ret) # 返回值是执行SQL语句之后受影响的行数# 获取返回结果# res = cursor.fetchall() # 列表套字典# res = cursor.fetchone() # 数据字典# res = cursor.fetchmany(3) # 列表套字典print(res)
1.execute返回值是执行SQL语句之后受影响的行数2.fetchall()获取所有的结果fetchone()获取结果集第一个结果fetchmany()括号内可以指定获取几个结果集import pymysql# 创建链接conn = pymysql.connect( # 赋值给 conn连接对象 host='127.0.0.1', # 本地回环地址 port=3306, # 默认端口 user='root', # 用户名 password='123', # 密码 database='db_01', # 连接数据库名称 charset='utf8' # 编码 不能写utf-8)# 生成一个游标对象(相当于cmd打开mysql中的 mysql>)cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典# 定义SQL语句sql = 'select * from egg'# 执行SQL语句ret = cursor.execute(sql)print(ret) # 返回值是执行SQL语句之后受影响的行数# 获取返回结果res = cursor.fetchall()res1 = cursor.fetchall()print(res)print(res1)
解析: 上述方法对数据的获取也存在光标的概念fetchall()获取所有的结果
import pymysql# 创建链接conn = pymysql.connect( # 赋值给 conn连接对象 host='127.0.0.1', # 本地回环地址 port=3306, # 默认端口 user='root', # 用户名 password='123', # 密码 database='db_01', # 连接数据库名称 charset='utf8' # 编码 不能写utf-8)# 生成一个游标对象(相当于cmd打开mysql中的 mysql>)cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典# 定义SQL语句sql = 'select * from egg'# 执行SQL语句ret = cursor.execute(sql)print(ret) # 返回值是执行SQL语句之后受影响的行数# 获取返回结果res = cursor.fetchone() # 获取结果集的第一个结果# cursor.scroll(1, 'relative') # 相对当前位置移动(相对移动)# cursor.scroll(0, 'absolute') # 相对数据开头位置移动(绝对移动)res1 = cursor.fetchall() # 获取所有结果print(res)print(res1)相对移动
绝对移动
import pymysql# 创建链接conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', database='db_01', charset='utf8')# 生成一个游标对象cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典# 获取用户名和密码username = input('username>>>:').strip()password = input('password>>>:').strip()# 构造SQL语句sql = "select * from egg where name='%s' and password='%s'"%(username,password)print(sql)# 执行sql语句cursor.execute(sql)# 获取所有返回结果res = cursor.fetchall()# if判断if res: print(res) print('登录成功')else: print('用户名或密码错误')
目前的pymysq代码用户登录是否安全了?让我们进行测试pymysql代码(安全性)

1.用户名不正确 不需要密码也能登录2.用户名和密码都不需要也能登录
SQL注入问题的产生 就是通过一线特殊符号的组合 达到某些特定的效果从而避免常规的逻辑SQL注入问题如何解决 execute方法自动帮你解决execute方法,自动将 用户名和密码放在对应的%s内,并且放之前会自动对用户名和密码做特殊符号的校验,确保安全性。import pymysql# 创建链接conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', database='db_01', charset='utf8')# 生成一个游标对象cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典登录功能1.获取用户名和密码2.基于用户名和密码直接精准查找username = input('username>>>:').strip()password = input('password>>>:').strip()# 构造SQL语句sql = "select * from egg where name=%s and password=%s" # 针对核心数据 不要自己拼接 交由execute方法帮你筛选再拼接print(sql)# 执行sql语句cursor.execute(sql,(username, password))# 获取所有返回结果res = cursor.fetchall()# if判断if res: print(res) print('登录成功')else: print('用户名或密码错误')

二次确认作用:针对增删改操作 需要二次确认才可生效import pymysql# 创建链接conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', database='db_01', charset='utf8')# 生成一个游标对象cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典sql1 = 'select * from egg' # 查询表内数据sql2 = 'insert into egg(name,password) values(%s,%s)' # 插入数据sql3 = 'update egg set name=jasonNB where id=1' # 修改数据sql4 = 'delete from egg where id=2' # 删除数据cursor.execute(sql1)print(cursor.fetchall())
cursor.execute(sql2,('objk',123))
res = cursor.execute(sql3)print(res)
res = cursor.execute(sql4)print(res)
1.查询语句可以正常执行并获取结果cursor.execute(sql1)2.插入语句能够执行 但是并没有影响表数据cursor.execute(sql2,('jackson',666))3.更新语句能够执行 但是并没有影响表数据res = cursor.execute(sql3)print(res)4.删除语句能够执行 但是并没有影响表数据res = cursor.execute(sql4)print(res)因为,该四项操作重要程度不一样,增删改查的级别不一样,查的级别是最低的,所有可以操作,但是,增删改的级别最高的,pymysq没有权限去操作,需要使用到二次确认才能进行增删改操作。'''针对增删改操作 需要二次确认才可生效 '''二次确认关键字:commit()作用: 针对增删改操作 需要二次确认才可生效'''针对增删改操作 需要二次确认才可生效'''# 1.插入数据cursor.execute(sql2,('tony',123))# 二次确认conn.commit()# 2.修改数据cursor.execute(sql3)# 二次确认conn.commit()# 3.删除数据cursor.execute(sql4)# 二次确认conn.commit()
自动二次确认:autocommmit=True # 涉及到增删改查 自动二次确认import pymysql# 创建链接conn = pymysql.connect( host='127.0.0.1', port=3306, user='root', password='123', database='db_01', charset='utf8', autocommit=True # 涉及到增删改 自动二次确认)# 生成一个游标对象cursor = conn.cursor(cursor=pymysql.cursors.DictCursor) # 让数据自动组织成字典sql1 = 'select * from egg'sql2 = 'insert into egg(name,password) values(%s,%s)'sql3 = 'update egg set name="jaonNB" where id=2'sql4 = 'delete from egg where id=1''''针对增删改操作 需要二次确认才可生效'''# 1.插入数据cursor.execute(sql2,('laike',123))# 2.修改数据cursor.execute(sql3)# 3.删除数据cursor.execute(sql4)主动关闭链接 释放资源conn.close()
# 同时插入多个数据cursor.executemany(sql2,[('jason1',1),('jason2',2),('jason3',3)])