开发者社区> 我要学编程> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

数据库入门-pymysql模块的使用

简介: 一、pymysql模块安装 由于本人的Python版本为python3.7,所以用pymysql来连接数据库(mysqldb不支持python3.x) 方法一: #在cmd输入 pip3 install pymysql 方法二(pycharm IDE): [File] >> [s...
+关注继续查看

一、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="123456", # 密码
    database="test", #数据库名称
    port=3306, # 端口号 可选 整型
    charset="utf8" # 编码  可选
)

还可以使用函数的形式连接数据库:

import pymysql

def connect_mysql():
    db_info = {
        'host':'192.168.13.253',
        'user':'zfj',
        'password':'123',
        '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 = "小花";
View Code

四、安全问题

如何保证数据安全是近几年来火热的主题之一,这里不细讲,就说一些和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类库学习记录
pymysql类库学习记录
50 0
PyMySQL模块安装指南
PyMySQL模块安装指南
76 0
requests模块的使用 | 手把手教你入门Python之一百一十八
除了使用浏览器给服务器发送请求以外,我们还可以使用第三方模块requests用代码来给服务器发送器请求,并获取结果。
2163 0
Python全栈 MySQL 数据库 (引擎、事物、pymysql模块、orm)
MySQL 数据库的引擎、事物、锁、调优、与Python的交互、ER、orm
2933 0
基于python的pymysql模块实现向数据库中插入一条数据
基于python的pymysql模块实现向数据库中插入一条数据 基于业务需求需要向某表经常插入数据,故编辑了该脚本方便在堡垒机中直接向服务器插入数据,这里我们以一行为例。 程序介绍:  程序分为两个函数分别为插入函数和查询函数顾名思义就是实现数据插入和查询 效果:带参数执行该程序 程序会判断该表.
2072 0
Python调用MySQL模块初试
学Python喊了很长时间了,总是因为各种各样的理由搁置,昨天想起来前同事推荐过一本Python的书《Python核心编程》第二版,就火速买了一本,Python的学习也算是个开始了。
1284 0
+关注
我要学编程
热爱学习,愿意接收新事物,有志称为一个互联网大佬
文章
问答
文章排行榜
最热
最新
相关电子书
更多
MySQL 开发规约实战
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载