python3 与 MySQL 是如何交互的

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


    相关实践学习
    基于CentOS快速搭建LAMP环境
    本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
    全面了解阿里云能为你做什么
    阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
    目录
    相关文章
    |
    10天前
    |
    SQL 关系型数据库 MySQL
    Python进阶第二篇(Python与MySQL数据库)
    Python进阶第二篇(Python与MySQL数据库)
    |
    17天前
    |
    SQL 关系型数据库 MySQL
    Python 操作 MySQL 数据库
    Python 操作 MySQL 数据库
    |
    23小时前
    |
    关系型数据库 MySQL 数据库
    Python中使用MySQL模糊查询的方法
    (1)同样需要将your_username、your_password、your_database替换为我们的MySQL数据库的实际用户名、密码和数据库名。 (2)在mysql.connector.connect()中,我们没有直接指定字符集和游标类型,因为mysql-connector-python的默认配置通常已经足够好。但是,如果需要,我们可以添加这些配置选项。 (3)使用cursor.close()和cnx.close()来确保游标和连接都被正确关闭。 (4)mysql-connector-python也支持使用上下文管理器(即with语句)来自动管理游标和连接的关闭,但这需要创建一个
    |
    1天前
    |
    SQL 关系型数据库 MySQL
    技术笔记:python连接mysql数据库
    技术笔记:python连接mysql数据库
    |
    23天前
    |
    SQL 关系型数据库 数据库
    17. Python 数据库操作之MySQL和SQLite实例
    17. Python 数据库操作之MySQL和SQLite实例
    69 2
    |
    2天前
    |
    关系型数据库 MySQL API
    PyMySQL:连接Python与MySQL的桥梁
    PyMySQL:连接Python与MySQL的桥梁
    |
    3天前
    |
    Python
    python鼠标交互绘制彩虹圆圈
    python鼠标交互绘制彩虹圆圈
    7 0
    |
    16天前
    |
    关系型数据库 MySQL API
    用Python一键艺龙酒店各个城市数据存入mysql
    用Python一键艺龙酒店各个城市数据存入mysql
    |
    29天前
    |
    SQL 关系型数据库 MySQL
    Python 操作 MySQL 数据库
    Python 操作 MySQL 数据库
    |
    1月前
    |
    机器学习/深度学习 关系型数据库 MySQL
    MySQL 到 Greenplum 实时数据同步实操分享,2024年最新【Python面试题
    MySQL 到 Greenplum 实时数据同步实操分享,2024年最新【Python面试题