首页 > 数据库 >Python知识分享第二十九天-PyMySQL

Python知识分享第二十九天-PyMySQL

时间:2024-12-18 22:32:27浏览次数:5  
标签:Python sql PyMySQL cursor 第二十九 result SQL close conn

PyMySQL介绍:

概述:
    它是Python的1个库(模块), 可以实现通过Python代码, 操作MySQL数据库.
    该库需要手动安装一下.
安装方式:
    方式1: 导包时自动安装.
    方式2: 在PyCharm的Settings -> Python编辑器或者Anaconda -> 安装
    方式3: 通过pip方式, 在命令行中安装.
        pip install pymysql -i 镜像地址
        例如:
            阿里云镜像:   https://mirrors.aliyun.com/pypi/simple/
            清华大学镜像: https://pypi.tuna.tsinghua.edu.cn/simple
操作步骤:
	1.获取连接对象
	2.根据连接对象 获取游标对象
	3.执行SQL语句 获取结果集
	4.操作结果集
	5.释放资源
细节:
	**如果操作的是更新语句(增删改),记得  提交(事务)**
# 导包
import pymysql
# 1.获取连接对象 传入 数据库地址 端口号 用户名 密码 数据库名称 编码方式
conn = pymysql.connect(
    host='127.0.0.1',
    user='root',
    password='123456',
    database='db2',
    port=3306,
    charset='utf8'
)
# print(conn)
# 2.根据连接对象 获取游标对象
cursor = conn.cursor()
# 3.执行SQL语句 获取结果集
sql = 'select * from areas;'
cursor.execute(sql)
data = cursor.fetchall()  # 元组套元组
# 4.操作结果集
for row in data:
    print(row)
# 5.释放资源
cursor.close()
conn.close()

案例: PyMysql操作表数据, CURD操作.

细节: 如果操作更新语句(增删改), 记得: 提交事务(相当于把结果保存)

import pymysql

def demo01_增():
    #  1. 获取连接对象.
    conn = pymysql.connect(
        host='127.0.0.1',
        user='root',
        password='123456',
        database='db2',
        port=3306,
        charset='utf8'
    )
    #  2. 根据连接对象, 获取游标对象.
    cursor = conn.cursor()
    #  3. 执行SQL语句, 获取结果集.
    sql = "insert into areas values (999999,'天龙族',99999);"
    result = cursor.execute(sql)
    print(f'受影响的行数: {result}')
    #  4. 操作结果集.
    if result != 0:
        conn.commit()
        print('添加成功')
    else:
        conn.rollback() # 事务回滚, 把数据还原到SQL执行前的状态, 类似于Linux的快照.
     #  5. 释放资源.
    cursor.close()
    conn.close()
def demo02_删():
    #  1. 获取连接对象.
    conn = pymysql.connect(
        host='127.0.0.1',
        user='root',
        password='123456',
        database='db2',
        port=3306,
        charset='utf8'
    )
    #  2. 根据连接对象, 获取游标对象.
    cursor = conn.cursor()
    #  3. 执行SQL语句, 获取结果集.
    sql = "delete from areas where id = 999999;"
    result = cursor.execute(sql)
    print(f'受影响的行数: {result}')
    #  4. 操作结果集.
    if result != 0:
        conn.commit()
        print('删除成功')
    else:
        conn.rollback() # 事务回滚, 把数据还原到SQL执行前的状态, 类似于Linux的快照.
     #  5. 释放资源.
    cursor.close()
    conn.close()

def demo03_改():
    #  1. 获取连接对象.
    conn = pymysql.connect(
        host='127.0.0.1',
        user='root',
        password='123456',
        database='db2',
        port=3306,
        charset='utf8'
    )
    #  2. 根据连接对象, 获取游标对象.
    cursor = conn.cursor()
    #  3. 执行SQL语句, 获取结果集.
    sql = "update areas set title = '龙族' where id=999999"
    result = cursor.execute(sql)
    print(f'受影响的行数: {result}')
    #  4. 操作结果集.
    if result != 0:
        conn.commit()
        print('修改成功')
    else:
        conn.rollback() # 事务回滚, 把数据还原到SQL执行前的状态, 类似于Linux的快照.
     #  5. 释放资源.
    cursor.close()
    conn.close()


def demo04_查():
    #  1. 获取连接对象.
    conn = pymysql.connect(
        host='127.0.0.1',
        user='root',
        password='123456',
        database='db2',
        port=3306,
        charset='utf8'
    )
    #  2. 根据连接对象, 获取游标对象.
    cursor = conn.cursor()
    #  3. 执行SQL语句, 获取结果集.
    sql = "select * from areas where id=999999"
    cursor.execute(sql)
    result = cursor.fetchall()
    #  4. 操作结果集.
    for row in result:
        print(row)
     #  5. 释放资源.
    cursor.close()
    conn.close()


if __name__ == '__main__':
    demo01_增()
    # demo02_删()
    demo03_改()
    demo04_查()

需求: 模拟登陆, 接收用户录入的账号和密码, 然后判断.

这种写法会有sql注入问题 例如用户输入: 随便’ or '1=1
这个时候所有的数据都会被查到

# 需求: 模拟登陆, 接收用户录入的账号和密码, 然后判断.


# 导包
import pymysql

# 1. 提示用户录入他/她的账号或者密码, 并接收.
uname = input('请录入您的账号: ')
pwd = input('请录入您的密码: ')

try:
    # 2. 连接数据库, 获取游标.
    conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', database='day03', charset='utf8')
    cursor = conn.cursor()

    # 3. 定义SQL语句.
    # sql = f"select * from users where username='{uname}' and password='{pwd}';"
    sql = "select * from users where username='%s' and password='%s';" % (uname, pwd)

    # 4. 执行SQL语句, 获取结果集, 判断是否登录成功.
    cursor.execute(sql)
    result = cursor.fetchone()
    if result:
        print('登录成功!')
    else:
        print('登陆失败!')
finally:
    # 5. 关闭游标和数据库连接, 释放资源.
    cursor.close()
    conn.close()

需求: 模拟登陆, 接收用户录入的账号和密码, 然后判断.

解决思路: 预编译思想, 即: 预先对SQL语句做编译, 此时已经确定了SQL语句的格式, 之后无论传入什么内容, 都只会当做普通的字符来处理.


# 导包
import pymysql

# 1. 提示用户录入他/她的账号或者密码, 并接收.
uname = input('请录入您的账号: ')
pwd = input('请录入您的密码: ')

try:
    # 2. 连接数据库, 获取游标.
    conn = pymysql.connect(host='localhost', port=3306, user='root', password='123456', database='day03', charset='utf8')
    cursor = conn.cursor()

    # 3. 定义SQL语句.
    # 拼接思路, 会发生SQL注入攻击.
    # sql = "select * from users where username='%s' and password='%s';" % (uname, pwd)

    # 预编译思想, 用%s来占位, 在之后执行SQL语句时, 传入具体的值即可.
    sql = "select * from users where username=%s and password=%s;"

    # 细节: 定义容器变量, 记录: 账号和密码.
    params = (uname, pwd)
    # 4. 执行SQL语句, 获取结果集, 判断是否登录成功.
    cursor.execute(sql, params)     # 执行SQL语句时, 传入SQL语句, 及给占位符填充的参数.
    result = cursor.fetchone()
    if result:
        print('登录成功!')
    else:
        print('登陆失败!')
finally:
    # 5. 关闭游标和数据库连接, 释放资源.
    cursor.close()
    conn.close()

坚持分享 共同进步 如有错误 欢迎指出

标签:Python,sql,PyMySQL,cursor,第二十九,result,SQL,close,conn
From: https://blog.csdn.net/weixin_45423893/article/details/144570043

相关文章

  • 常用于优化算法测试的python非凸函数有哪些?
            在优化算法领域,有一些常用的测试函数,它们被广泛用于评估和比较不同优化算法的性能。        非凸函数是指在其定义域内至少存在一个点,使得该点的任意邻域内函数值不满足凸性条件的函数。换句话说,非凸函数在其定义域内至少存在一个点,使得函数的图像在......
  • Python Tkinter 弹窗美化指南
    在Python编程中,Tkinter是标准GUI(图形用户界面)库,它允许开发者创建桌面应用程序。尽管Tkinter提供了基本的窗口和控件功能,但默认的样式和外观往往显得单调。因此,对Tkinter弹窗进行美化是提升用户体验的重要步骤。本文将详细介绍如何使用Tkinter创建并美化弹窗,包括理论概述和详细的代......
  • python连接okx查询自己的持仓【量化交易】
     需要安装ccxt以下代码在jupyter中运行需要去app中获取自己的apiKey、secret、password,才能查到自己的个人持仓情况根据自己的代理设置proxiesimportccxtimportpandasaspdimporttimefromIPython.displayimportclear_outputimporttracebackfromdatetimeimp......
  • python毕设 社区住户信息管理系统论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于社区住户信息管理系统的研究,现有研究多聚焦于大型企业或特定行业的信息管理,专门针对社区住户信息管理系统的研究相对较少。在国内......
  • python毕设 美容店服务管理系统论文+程序
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于美容店服务管理系统的研究,现有研究主要以传统的管理模式为主,专门针对利用python开发美容店服务管理系统的研究较少 1。在国内外,......
  • 如何用anaconda管理python环境
    安装首先就是安装anaconda,直接去官网下就行创建环境安装好后可以看到有这些文件单击打开AnacondaPrompt,可以看到以下画面,默认环境是base当我们想学习某项技术或编写某程序时可能会用到不同的python版本,那么可以在这里创建新环境,命令为condacreate-n环境名字pyth......
  • Python如何实现多线程
    Python中可以通过threading模块实现多线程编程。以下是一些关键点和示例代码:1.导入threading模块首先,你需要导入Python的threading模块,这个模块提供了创建和管理线程所需的类和函数。2.定义一个线程函数线程函数是线程执行的任务。这个函数将在新线程中运行。3.创建......
  • Python面试常见问题及答案11
    问题:Python中如何删除列表中的重复元素?答案:可以使用set函数,因为set是一个无序且不重复的元素集。将列表转换为set,然后再转换回列表即可去除重复元素。例如:a=[1,2,4,2,4,5,6,5,7,8,9,0];b=set(a);c=list(b),此时c为去重后的列表。问题:Python中的lambda函数是什么?它有什......
  • 学霸带你游戏化理解 Python 装饰器与生成器
    使代码更高效在现代Python开发中,装饰器和生成器为编程提供了强大的功能和灵活性。它们不仅能帮助程序员优化性能,还能使代码结构更加简洁、清晰。装饰器通过增强现有函数的功能,使得代码更具可扩展性和重用性;生成器则通过惰性求值提高内存效率,让你能够高效处理大规模数据。无......
  • Python爬虫框架之Scrapy
    Scrapy是一个用Python编写的强大的网络爬虫框架,用于高效地从网页中提取所需的数据。一、安装Scrapy确保已经安装了Python(建议使用Python3.x)。可以通过以下命令来安装Scrapy:在命令行中使用pipinstallscrapy(如果使用的是Anaconda环境,可以使用condainstall-cconda-forge......