python和pymysql

本文详细介绍了如何使用Python的pymysql库进行数据库操作,包括数据库连接、表的创建、数据的增删改查、事务处理及错误管理等核心功能。

python和pymysql

安装pyMySQL
pip install pymysql
检查是否安装成功
import pymysql

1、数据库的连接

前提条件:
已经创建testdb
表格employee已经创建
表格字段为first_name,last_name,age,sex,infrom
已经安装pymysql

    import pymysql
        #打开数据库连接
        db = pymysql.connect("localhost", "root", "", "testdb")
        # 使用 cursor() 方法创建一个游标对象 cursor
        cursor = db.cursor()
        # 使用 execute()  方法执行 SQL 查询
        cursor.execute("SELECT VERSION()")
        # 使用 fetchone() 方法获取单条数据.
        data = cursor.fetchone()
        print("Database version : %s " % data)
        # 关闭数据库连接
        db.close()

2、创建数据库表

execute() 方法可以创建表
    import pymysql
    # 打开数据库连接
    db = pymysql.connect("localhost", "root", "", "testdb")
     # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    # 使用 execute() 方法执行 SQL,如果表存在则删除
    cursor.execute("DROP TABLE IF EXISTS EMPLOYEE")
    # 使用预处理语句创建表
    sql = """CREATE TABLE EMPLOYEE (
             FIRST_NAME  CHAR(20) NOT NULL,
             LAST_NAME  CHAR(20),
             AGE INT,  
             SEX CHAR(1),
             INCOME FLOAT )"""
             cursor.execute(sql)
      # 关闭数据库连接
    db.close()

3、数据库中插入数据

import pymysql
    # 打开数据库连接
    db = pymysql.connect("localhost", "root", "", "testdb")
    # 使用cursor()方法获取操作游标
    cursor = db.cursor()
    # SQL 插入语句
    sql = """INSERT INTO EMPLOYEE(FIRST_NAME,
             LAST_NAME, AGE, SEX, INCOME)
             VALUES ('Mac', 'Mohan', 20, 'M', 2000)"""
    try:
        # 执行sql语句
        cursor.execute(sql)
        # 提交到数据库执行
        db.commit()
    except:
        # 如果发生错误则回滚
        db.rollback()
    # 关闭数据库连接
    db.close()

4、数据库查询操作

fetchone()获取单条数据,获取下一个查询结果集,结果集是一个对象
fetchall()获取多条数据,接收全部的返回结果行
rowcount:是一个只读属性,并返回执行execute()方法后影响的行数
查询employee表中salary字段大于1000对的所有数据

import pymysql
#打开数据库连接
db = pymysql.connect("localhost", "root", "", "TESTDB")
#使用cursor()方法获取操作游标
cursor = db.cursor()
#SQL 查询语句
sql = "SELECT * FROM EMPLOYEE \
       WHERE INCOME > %s" % (1000)
    try:
            # 执行SQL语句
            cursor.execute(sql)
            # 获取所有记录列表
            results = cursor.fetchall()
            for row in results:
                fname = row[0]
                lname = row[1]
                age = row[2]
                sex = row[3]
                income = row[4]
                # 打印结果
                print("fname=%s,lname=%s,age=%s,sex=%s,income=%s" % \
                      (fname, lname, age, sex, income))
        except:
            print("Error: unable to fetch data")
            # 关闭数据库连接
        db.close()

5、数据库的更新操作

将testdb表中的sex为M的age增加1

    import pymysql
    # 打开数据库连接
    db = pymysql.connect("localhost","root","","TESTDB" )
    # SQL 更新语句
    sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
    try:
       # 执行SQL语句
       cursor.execute(sql)
       # 提交到数据库执行
       db.commit()
    except:
       # 发生错误时回滚
       db.rollback()
    # 关闭数据库连接
    db.close()

6、删除操作

删除数据表中的数据
删除age大于20的所有数据

    import pymysql
    # 打开数据库连接
    db = pymysql.connect("localhost","root","","TESTDB" )
    # 使用cursor()方法获取操作游标 
    cursor = db.cursor()
    # SQL 删除语句
    sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
    try:
       # 执行SQL语句
       cursor.execute(sql)
       # 提交修改
       db.commit()
    except:
       # 发生错误时回滚
       db.rollback()
    # 关闭连接
    db.close()

7、执行事务

事务机制可以确保数据的一致性
事务应该具有四个属性:原子性、一致性、隔离性、持久性 四个属性通常称为ACID特性
原子性:一个事务时一个不可分割的工作单位,事务中包括的诸多操作,要不都做,要不就都不做
一致性:事务必须是使数据库从一个一致性状态到另一个一致性状态,一致性与原子性是密切相关的
隔离性:一个事务的执行不能被其他事物干扰。就是一个事务内部操作及使用的数据对兵法的其他事物是隔离的,并发执行的各个事务之间不能互相干扰
持久性:持续性也称永久性,指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响

 #SQL删除记录语句
    sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
try:
   #执行SQL语句
   cursor.execute(sql)
   #向数据库提交
   db.commit()
except:
   #发生错误时回滚
   db.rollback()
commit()

所有更新操作,rollback()方法回滚当前游标的所有操作

8、错误处理

Warning 当有严重警告时触发
Error 警告以外所有其他错误类。必须是 StandardError 的子类。
InterfaceError 当有数据库接口模块本身的错误(而不是数据库的错误)发生时触发。 必须是Error的子类。
DatabaseError 和数据库有关的错误发生时触发。 必须是Error的子类。
DataError 当有数据处理时的错误发生时触发
OperationalError 指非用户控制的,而是操作数据库时发生的错误
IntegrityError 完整性相关的错误,例如外键检查失败等。必须是DatabaseError子类。
InternalError 数据库的内部错误
ProgrammingError 程序错误
NotSupportedError 不支持错误,指使用了数据库不支持的函数或API等

基于数据驱动的 Koopman 算子的递归神经网络模型线性化,用于纳米定位系统的预测控制研究(Matlab代码实现)内容概要:本文围绕“基于数据驱动的Koopman算子的递归神经网络模型线性化”展开,旨在研究纳米定位系统的预测控制问题,并提供完整的Matlab代码实现。文章结合数据驱动方法与Koopman算子理论,利用递归神经网络(RNN)对非线性系统进行建模与线性化处理,从而提升纳米级定位系统的精度与动态响应性能。该方法通过提取系统隐含动态特征,构建近似线性模型,便于后续模型预测控制(MPC)的设计与优化,适用于高精度自动化控制场景。文中还展示了相关实验验证与仿真结果,证明了该方法的有效性先进性。; 适合人群:具备一定控制理论基础Matlab编程能力,从事精密控制、智能制造、自动化或相关领域研究的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于纳米级精密定位系统(如原子力显微镜、半导体制造设备)中的高性能控制设计;②为非线性系统建模与线性化提供一种结合深度学习与现代控制理论的新思路;③帮助读者掌握Koopman算子、RNN建模与模型预测控制的综合应用。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现流程,重点关注数据预处理、RNN结构设计、Koopman观测矩阵构建及MPC控制器集成等关键环节,并可通过更换实际系统数据进行迁移验证,深化对方法泛化能力的理解。
### 比较 `mysql-connector-python` `PyMySQL` #### 功能特性 `mysql-connector-python` 是由 Oracle 官方提供的用于 Python 的 MySQL 驱动程序,支持多种协议并提供丰富的功能集[^2]。而 `PyMySQL` 则是一个纯 Python 实现的 MySQL 客户端库,具有轻量级的特点。 对于事务处理支持方面: - `mysql-connector-python` 支持多语句执行以及更复杂的查询操作,并且能够更好地兼容最新的 MySQL 版本特性。 - `PyMySQL` 同样可以很好地完成基本的数据读写任务,在某些情况下可能更加简洁易用[^1]。 #### 使用方式对比 ##### 连接数据库 两者都提供了相似的方法来创建到 MySQL 数据库的连接对象,但是参数有所不同。 使用 `mysql-connector-python` 创建连接: ```python import mysql.connector connection = mysql.connector.connect( host='localhost', user='root', password='password', database='testdb' ) ``` 使用 `PyMySQL` 创建连接: ```python import pymysql connection = pymysql.connect( host='localhost', user='root', password='password', db='testdb', charset='utf8mb4', cursorclass=pymysql.cursors.DictCursor ) ``` 可以看到,虽然两个库都能实现相同的功能,但在具体配置上存在差异,比如 `charset` 参数仅存在于 `PyMySQL` 中;另外就是默认游标的类型也不同,默认情况下 `mysql-connector-python` 返回元组列表形式的结果集,而 `PyMySQL` 可以通过设置 `cursorclass` 来指定返回字典格式的结果集。 #### 性能表现 通常来说,由于 `mysql-connector-python` 更接近底层 C 库 (`libmysqlclient`) ,所以在性能上有一定优势。不过实际应用中这种差距往往并不明显,除非是在高并发场景下才会有所体现。另一方面,因为 `PyMySQL` 是完全基于 Python 编写的,所以更容易调试理解其内部工作原理。 #### 社区支持与维护情况 官方发布的 `mysql-connector-python` 得到了更好的技术支持服务保障,文档齐全,更新频率较高。相比之下,尽管 `PyMySQL` 也有活跃的开发者社区贡献代码修复 bug 并增加新功能,但由于不是来自 MySQL 自身团队开发的产品,在企业环境中可能会被认为不如前者稳定可靠。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值