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

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 一、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

焚膏油以继晷,恒兀兀以穷年。
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
22天前
|
Java 数据库连接 测试技术
SpringBoot入门 - 添加内存数据库H2
SpringBoot入门 - 添加内存数据库H2
32 3
SpringBoot入门 - 添加内存数据库H2
|
1月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
48 4
SpringBoot入门(4) - 添加内存数据库H2
|
4月前
|
存储 SQL 分布式数据库
OceanBase 入门:分布式数据库的基础概念
【8月更文第31天】在当今的大数据时代,随着业务规模的不断扩大,传统的单机数据库已经难以满足高并发、大数据量的应用需求。分布式数据库应运而生,成为解决这一问题的有效方案之一。本文将介绍一款由阿里巴巴集团自主研发的分布式数据库——OceanBase,并通过一些基础概念和实际代码示例来帮助读者理解其工作原理。
379 0
|
2月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
36 2
SpringBoot入门(4) - 添加内存数据库H2
|
1月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
66 13
|
1月前
|
Java 数据库连接 测试技术
SpringBoot入门(4) - 添加内存数据库H2
SpringBoot入门(4) - 添加内存数据库H2
43 4
|
2月前
|
存储 人工智能 Java
Neo4j从入门到精通:打造高效知识图谱数据库 | AI应用开发
在大数据和人工智能时代,知识图谱作为一种高效的数据表示和查询方式,逐渐受到广泛关注。本文从入门到精通,详细介绍知识图谱及其存储工具Neo4j,涵盖知识图谱的介绍、Neo4j的特点、安装步骤、使用方法(创建、查询)及Cypher查询语言的详细讲解。通过本文,读者将全面了解如何利用Neo4j处理复杂关系数据。【10月更文挑战第14天】
152 6
|
2月前
|
SQL 存储 数据管理
SQL数据库的使用指南:从入门到精通
随着信息技术的飞速发展,数据库已成为各类企业和组织不可或缺的一部分。作为最流行的数据库管理系统之一,SQL数据库广泛应用于各种场景,如数据存储、数据管理、数据分析等。本文将详细介绍SQL数据库的使用方法,帮助初学者快速入门,并帮助有经验的开发者深化理解。一、SQL数据库基础首先,我们需要理解SQL数
131 2
|
3月前
|
SQL 关系型数据库 MySQL
学成在线笔记+踩坑(3)——【内容模块】课程分类查询、课程增改删、课程计划增删改查,统一异常处理+JSR303校验
课程分类查询、课程新增、统一异常处理、统一封装结果类、JSR303校验、修改课程、查询课程计划、新增/修改课程计划
学成在线笔记+踩坑(3)——【内容模块】课程分类查询、课程增改删、课程计划增删改查,统一异常处理+JSR303校验
|
3月前
|
前端开发 应用服务中间件 API