数据库入门-pymysql模块的使用
一、pymysql模块安装
由于本人的Python版本为python3.7,所以用pymysql来连接数据库(mysqldb不支持python3.x)
方法一:
#在cmd输入
pip3 install pymysql
方法二(pycharm IDE):
[File] >> [settings] >> [Project: study] >> [Project Interpreter] >>点击右上角“+”号,搜索框输入“pymysql”>> [Install按钮]

二、连接数据库
import pymysql
# 创建链接得到一个链接对象
conn = pymysql.Connect(
host="127.0.0.1", # 数据库服务器主机地址
user="root", # 用户名
password="", # 密码
database="test", #数据库名称
port=3306, # 端口号 可选 整型
charset="utf8" # 编码 可选
)
还可以使用函数的形式连接数据库:
import pymysql def connect_mysql():
db_info = {
'host':'192.168.13.253',
'user':'zfj',
'password':'',
'port':3306,
'database':'day40',
'charset':'utf8'
}
try:
db = pymysql.Connect(**db_info)
print('连接成功!')
except Exception as e:
print('e')
return db if __name__ == '__main__':
db = connect_mysql()
函数的形式
三、操作数据库
1.连接对象的常用方法
commit()#提交稳定存储的更改
rollback()#回滚当前事务
autocommit_mode=无 #指定的自动提交模式。无表示使用服务器默认值。
要想操作数据库必须先建立游标对象,不需要自己创建调用数据库对象下面的cursor方法就可以了
2.游标对象
创建游标:
db = pymysql.connect(config) # 创建数据库链接对象
cus = db.cursor # 创建游标对象
print(dir(cus)) # 查看游标的方法
游标常用方法:
cus.cursor() #创建游标对象
cus.close() #关闭游标对象 cus.excute(query,args=None) #执行查询
参数:
query(str) - 要执行的查询。
args(元组,列表或字典) - 与查询一起使用的参数。(可选的)
返回:受影响的行数
返回类型:INT executemany(查询,args ) #针对一个查询运行多个数据
参数:
query - 要在服务器上执行的查询
args - 序列或映射的序列。它用作参数。
此方法可提高多行INSERT和REPLACE的性能。否则它等同于使用execute()循环遍历args。 cus.fetchone() #获取下一行
cus.fetchall() #获取所有行
cus.fetchmany(size =None) #获取几行
注:sql必须是字符串类型
3.示例
import pymysql
# 创建链接得到一个链接对象
conn = pymysql.Connect(
host="127.0.0.1", # 数据库服务器主机地址
user="root", # 用户名
password="admin", # 密码
database="day42", #数据库名称
port=3306, # 端口号 可选 整型
charset="utf8" # 编码 可选
)
# 获取游标对象 pymysql.cursors.DictCursor指定 返回的结果类型 为字典 默认是元祖类型
cursor = conn.cursor(pymysql.cursors.DictCursor) # # 添加数据
# res = cursor.execute("insert into emp values(100,'胡歌','男',30,1,'job',60000)")
# if res:
# print("插入成功")
# else:
# print("插入失败") # 提交修改 因为pymysql 模块默认是启用事务的 你的sql语句 如果不提交 相当于没有执行 # conn.commit()
# res = cursor.execute("drop database day42") # res = cursor.execute("delete from t1 where id = 1")
# print(res) try:
cursor.execute("update moneyTable set money = money - 50 where name = '小明'")
#如果小花的账户出问题了 无法更新数据 那就需要回滚
cursor.execute("update moneyTable set money = money + 50 where name = '小花'")
conn.commit()
except:
conn.rollback() cursor.close()
conn.close() # 小明有100块 准备给小花转50
# update moneyTable set money = money - 50 where name = "小明";
# 发生一些别错误 如果发生了错误 就执行撤销操作 rollback;
# update moneyTable set money = money + 50 where name = "小花";
四、安全问题
如何保证数据安全是近几年来火热的主题之一,这里不细讲,就说一些和pymysql相关的sql注入攻击。
#sql = "select *from user where user = '%s' and pwd = '%s';" % (input("input userName"),input("input password"))
# 当用户输入的用户名为字符串 为 yy' -- 时
# 最终产生的sql select *from user where user = 'yy' -- ' and pwd = '987657890';
# -- 用于mysql注释 意思是 后面的内容忽略掉
# 从而导致 密码是否正确都能登录成功
# "select *from user where user = 'axxax' or 1=1;
那python是如何避免普通的sql注入的呢?
通过excute函数,将需要传的参数放到arg参数中,让pymysql帮你屏蔽
count = cursor.execute("select *from user where user = %s and pwd = %s;",args=(input("user"),input("pwd")))
print(count)
if count:
print("login success")
else:
print("login error")
cursor.close()
conn.close()
读者想要学习更多关于安全的内容可以关注“实验吧”学习:http://www.shiyanbar.com/
部分参考 pymysql文档:https://pymysql.readthedocs.io/en/latest/index.html
连接对象规范:https://www.python.org/dev/peps/pep-0249/#connection-objects
数据库入门-pymysql模块的使用的更多相关文章
- Python连接MySQL数据库之pymysql模块使用
安装PyMySQL pip install pymysql PyMySQL介绍 PyMySQL是在python3.x版本中用于连接MySQL服务器的一个库,2中则使用mysqldb. Django中也 ...
- Python连接MySQL数据库之pymysql模块
pymysql 在python3.x 中用于连接MySQL服务器的一个库:Python2中则使用mysqldb pymysql的模块的基本的使用 # 导入pymysql模块 import pymysq ...
- 数据库中pymysql模块的使用
pymysql 模块 使用步骤: 核心类Connect链接用和Cursor读写用 1. 与数据库服务器建立链接 2. 获取游标对象(用于发送和接收数据) 3. 用游标执行sql语句 4. 使用fetc ...
- Python之路【第二十五篇】:数据库之pymysql模块
数据库进阶 一.pymysql模块 pymysql是Python中操作Mysql的模块,其使用的方法和py2的MySQLdb几乎相同. 二.pymysql模块安装 pip install pymysq ...
- Mysql(九):Python连接MySQL数据库之pymysql模块使用
Python3连接MySQL 本文介绍Python3连接MySQL的第三方库--PyMySQL的基本使用. PyMySQL介绍 PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服 ...
- 数据库操作——pymysql模块
一 import pymysql conn=pymysql.connect( host='localhost', port=3306, user='zuo', password=', database ...
- 可视化工具Navicat的使用/pymysql模块的使用
一.可视化工具Navicat的使用 1.官网下载:http://www.navicat.com/en/products/navicat-for-mysql 2.网盘下载:http://pan.baid ...
- MySQL:记录的增删改查、单表查询、约束条件、多表查询、连表、子查询、pymysql模块、MySQL内置功能
数据操作 插入数据(记录): 用insert: 补充:插入查询结果: insert into 表名(字段1,字段2,...字段n) select (字段1,字段2,...字段n) where ...; ...
- 05 数据库入门学习-正则表达式、用户管理、pymysql模块
一.正则表达式 正则表达式用于模糊查询,模糊查询已经讲过了 like 仅支持 % 和 _ 远没有正则表达式灵活当然绝大多数情况下 like足够使用 #语法 select *from table whe ...
随机推荐
- Fetch API & Async Await
Fetch API & Async Await const fetchJSON = (url = ``) => { return fetch(url, { method: "G ...
- python3 重写、重用、重载
重用重用是用于在对象的概念中,实现代码的重用性 在继承角度,在子类继承父类之后,重新使用父类属性方法即是代码的重用 在组合角度,在一个类中以另外一个类的对象作为数据属性,提高代码的重用性 重用的方式: ...
- leanote折腾指南
持续更新. 过几天把自己的修改好的css放到github上给大家参考. https://github.com/whuwangyong/leanote-conf TODO leanote Linux/W ...
- 洛谷P1072Hankson的趣味题题解
题目 一道十分经典的数论题,在考场上也可以用暴力的算法来解决,从而得到\(50pts\)的较为可观的分数,而如果想要AC的话,我们观察原题给的数据范围\(a,b,c,d\)(为了好表示,分别代表a1, ...
- 题解:LOJ540游戏
题目描述 小L计划进行n场游戏,每场游戏使用一张地图,小 L 会同时使用三辆车在该地图上完成游戏. 小 L 的赛车有三辆,分别用大写字母 A.B.C 表示.地图是一张无向简单图(没有重边或自环),每次 ...
- 洛谷 P2590 [ZJOI2008]树的统计
大家好,我非常喜欢暴力数据结构,于是我用块状树过了这道题目 题目: 一棵树上有n个节点,编号分别为1到n,每个节点都有一个权值w. 我们将以下面的形式来要求你对这棵树完成一些操作: I. CHANGE ...
- postman随机生成数
postman做重复测试时,随机数就有很大的作用,不用每次都输入 在postman的Params中,输入一个左大括号,会显示三种随机数: 也可以在body中设置 随机数如下: {{$guid}}:添加 ...
- 20175221 《Java程序设计》迭代和JDB(课下作业,选做):
20175221 <Java程序设计> 迭代和JDB(课下作业,选做): 任务详情 1 使用C(n,m)=C(n-1,m-1)+C(n-1,m)公式进行递归编程实现求组合数C(m,n)的功 ...
- 记录下扣jio的2018年
踩着18年的尾巴,写下这篇总结,既给18年画上句号,也展望19年,制定下计划. 自17年底正式接手团队项目管理工作以来,虽然前面一年都干了大部分工作,但正式走到这个位置上来,还是有一部分的期待.接手之 ...
- 八.django模型系统(二)之常用查询及表关系的实现
Ⅰ.常用查询 1.几个概念 每一个django模型类,都有一个默认的管理器,objects,查询就是依赖于objects管理器进行的(在创建时就被添加了). QuerySet表示数据库中对象的列表( ...