python3 与 MySQL 是如何交互的

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS PostgreSQL,集群系列 2核4GB
简介: PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。在进行本文以下内容之前需要注意: • 你有一个MySQL数据库,并且已经启动。• 你有可以连接该数据库的用户名和密码• 如果你是与远程数据库交互 ,还需要给权限 否则会报以下错误

 PyMySQL介绍

PyMySQL 是在 Python3.x 版本中用于连接 MySQL 服务器的一个库,Python2中则使用mysqldb。

PyMySQL安装

pip install pymysql

连接数据库

注意事项

在进行本文以下内容之前需要注意:

    • 你有一个MySQL数据库,并且已经启动。
    • 你有可以连接该数据库的用户名和密码
    • 如果你是与远程数据库交互 ,还需要给权限 否则会报以下错误
    Traceback (most recent call last):
      File "/home/pi/Mysqltest.py", line 4, in <module>
        conn = pymysql.connect(host="192.168.1.108", user="root",password="123456",database="pi-mysql",charset="utf8")
      File "/home/pi/.local/lib/python3.5/site-packages/pymysql/__init__.py", line 94, in Connect
        return Connection(*args, **kwargs)
      File "/home/pi/.local/lib/python3.5/site-packages/pymysql/connections.py", line 325, in __init__
        self.connect()
      File "/home/pi/.local/lib/python3.5/site-packages/pymysql/connections.py", line 599, in connect
        self._request_authentication()
      File "/home/pi/.local/lib/python3.5/site-packages/pymysql/connections.py", line 861, in _request_authentication
        auth_packet = self._read_packet()
      File "/home/pi/.local/lib/python3.5/site-packages/pymysql/connections.py", line 684, in _read_packet
        packet.check_error()
      File "/home/pi/.local/lib/python3.5/site-packages/pymysql/protocol.py", line 220, in check_error
        err.raise_mysql_exception(self._data)
      File "/home/pi/.local/lib/python3.5/site-packages/pymysql/err.py", line 109, in raise_mysql_exception
        raise errorclass(errno, errval)
    pymysql.err.OperationalError: (1045, "Access denied for user 'root'@'192.168.1.111' (using password: YES)")

    image.gif

     因此你需要加上权限 进行如下操作:

     点击数据库 用户 --->新建用户

    image.gif

    然后输入用户名 root   再输入访问的ID(我这里是树莓派的ip地址)   插件 选 mysql-native-password 密码 123456

    image.gif

    然后再点 用户 就可以看到 添加上了    再 点击 新添加用户 然后点击 权限管理员

    然后是 点击 需要交互的数据库名  再点击添加权限  把权限给 新添加的用户  权限 全部勾上好了  然后保存

    image.gif编辑

    然后 重启一次 数据库  或者 涮新一下  就可以 远程与数据库之间交互了

    基本使用

    # 导入pymysql模块importpymysql# 连接conn=pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
    # 得到一个可以执行SQL语句的光标对象cursor=conn.cursor()
    # 定义要执行的SQL语句sql="""CREATE TABLE USER1 (id INT auto_increment PRIMARY KEY ,name CHAR(10) NOT NULL UNIQUE,age TINYINT NOT NULL)ENGINE=innodb DEFAULT CHARSET=utf8;"""# 执行SQL语句cursor.execute(sql)
    # 关闭光标对象cursor.close()
    # 关闭数据库连接conn.close()

    image.gif

    增删改查操作

    1.增

    # 导入pymysql模块importpymysql# 连接conn=pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
    # 得到一个可以执行SQL语句的光标对象cursor=conn.cursor()
    sql="INSERT INTO USER1(name, age) VALUES (%s, %s);"username="LHL"age=22# 执行SQL语句cursor.execute(sql, [username, age])
    # 提交事务(需要提交事物)conn.commit()
    cursor.close()
    conn.close()

    image.gif

    如过没有效果 请 刷新一下 或 重启数据库。

    1.1插入数据失败回滚

    # 导入pymysql模块importpymysql# 连接conn=pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
    # 得到一个可以执行SQL语句的光标对象cursor=conn.cursor()
    sql="INSERT INTO USER1(name, age) VALUES (%s, %s);"username="LHL"age=22try:
    # 执行SQL语句cursor.execute(sql, [username, age])
    # 提交事务conn.commit()
    # 提交之后,获取刚插入的数据的ID#last_id = cursor.lastrowidexceptExceptionase:
    # 有异常,回滚事务conn.rollback()
    cursor.close()
    conn.close()

    image.gif

    2.删

    # 导入pymysql模块importpymysql# 连接databaseconn=pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
    # 得到一个可以执行SQL语句的光标对象cursor=conn.cursor()
    sql="DELETE FROM USER1 WHERE id=%s;"try:
    cursor.execute(sql, [4])
    # 提交事务conn.commit()
    exceptExceptionase:
    # 有异常,回滚事务conn.rollback()
    cursor.close()
    conn.close()

    image.gif

    如过没有效果 请 刷新一下 或 重启数据库。

    3.改

    # 导入pymysql模块importpymysql# 连接conn=pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
    # 得到一个可以执行SQL语句的光标对象cursor=conn.cursor()
    # 修改数据的SQL语句sql="UPDATE USER1 SET age=%s WHERE name=%s;"username="LHL"age=10try:
    # 执行SQL语句cursor.execute(sql, [age, username])
    # 提交事务conn.commit()
    exceptExceptionase:
    # 有异常,回滚事务conn.rollback()
    cursor.close()
    conn.close()

    image.gif

    如过没有效果 请 刷新一下 或 重启数据库。

    4.查

    # 导入pymysql模块importpymysql# 连接databaseconn=pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
    # 得到一个可以执行SQL语句的光标对象cursor=conn.cursor()
    # 查询数据的SQL语句sql="SELECT id,name,age from USER1 WHERE id=1;"# 执行SQL语句cursor.execute(sql)
    # 获取单条查询数据res=cursor.fetchone()
    cursor.close()
    conn.close()
    # 打印下查询结果print(res)

    image.gif

    如过没有效果 请 刷新一下 或 重启数据库。

    5.批量执行

    # 导入pymysql模块importpymysql# 连接databasepconn=pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
    # 得到一个可以执行SQL语句的光标对象cursor=conn.cursor()
    sql="INSERT INTO USER1(name, age) VALUES (%s, %s);"data= [("LHL", 22), ("BOb", 20), ("xiaoming", 21)]
    try:
    # 批量执行多条插入SQL语句cursor.executemany(sql, data)
    # 提交事务conn.commit()
    exceptExceptionase:
    # 有异常,回滚事务conn.rollback()
    cursor.close()
    conn.close()

    image.gif

    查询多条数据

    如过没有效果 请 刷新一下 或 重启数据库。

    # 导入pymysql模块
    import pymysql
    # 连接
    conn = pymysql.connect(host=“你的数据库地址”, user=“用户名”,password=“密码”,database=“数据库名”,charset=“utf8”)
    # 得到一个可以执行SQL语句的光标对象
    cursor = conn.cursor()
    # 查询数据的SQL语句
    sql = "SELECT id,name,age from USER1;"
    # 执行SQL语句
    cursor.execute(sql)
    # 获取多条查询数据
    res = cursor.fetchall()
    cursor.close()
    conn.close()
    # 打印下查询结果
    print(res)

    image.gif


    相关实践学习
    如何在云端创建MySQL数据库
    开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
    全面了解阿里云能为你做什么
    阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
    目录
    相关文章
    |
    3月前
    |
    SQL 关系型数据库 MySQL
    MySQL操作利器——mysql-connector-python库详解
    MySQL操作利器——mysql-connector-python库详解
    776 0
    |
    1月前
    |
    前端开发 API 开发者
    Python Web开发者必看!AJAX、Fetch API实战技巧,让前后端交互如丝般顺滑!
    在Web开发中,前后端的高效交互是提升用户体验的关键。本文通过一个基于Flask框架的博客系统实战案例,详细介绍了如何使用AJAX和Fetch API实现不刷新页面查看评论的功能。从后端路由设置到前端请求处理,全面展示了这两种技术的应用技巧,帮助Python Web开发者提升项目质量和开发效率。
    43 1
    |
    2月前
    |
    关系型数据库 MySQL 数据库
    Mysql学习笔记(四):Python与Mysql交互--实现增删改查
    如何使用Python与MySQL数据库进行交互,实现增删改查等基本操作的教程。
    69 1
    |
    2月前
    |
    Python
    Python软链接:Python 2与现代Python的交互
    Python软链接:Python 2与现代Python的交互
    31 4
    |
    2月前
    |
    前端开发 API 开发者
    从零到精通,AJAX与Fetch API让你的Python Web前后端交互无所不能!
    从零到精通,AJAX与Fetch API让你的Python Web前后端交互无所不能!
    45 3
    |
    2月前
    |
    Python
    Python软链接:Python 2与现代Python的交互
    Python软链接:Python 2与现代Python的交互
    23 0
    |
    3月前
    |
    SQL 关系型数据库 MySQL
    30天拿下Python之使用MySQL
    30天拿下Python之使用MySQL
    47 0
    |
    3月前
    |
    关系型数据库 MySQL 数据管理
    pymysql:Python操作MySQL数据库的又一利器
    pymysql:Python操作MySQL数据库的又一利器
    27 0
    |
    3月前
    |
    SQL 关系型数据库 MySQL
    Python小技巧——将CSV文件导入到MySQL数据库
    Python小技巧——将CSV文件导入到MySQL数据库
    95 0
    |
    7天前
    |
    SQL 关系型数据库 MySQL
    MySQL导入.sql文件后数据库乱码问题
    本文分析了导入.sql文件后数据库备注出现乱码的原因,包括字符集不匹配、备注内容编码问题及MySQL版本或配置问题,并提供了详细的解决步骤,如检查和统一字符集设置、修改客户端连接方式、检查MySQL配置等,确保导入过程顺利。