python数据库操作之PyMysql怎么使用

数据库   发布日期:2023年07月24日   浏览次数:517

本文小编为大家详细介绍“python数据库操作之PyMysql怎么使用”,内容详细,步骤清晰,细节处理妥当,希望这篇“python数据库操作之PyMysql怎么使用”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。

    PyMysql使用详解

    在编写小脚本时,PyMysql是快速连接并操作数据库的一个不错选择。

    安装

    1. pip3 install PyMysql
    2. # 可使用 pip list 查看此环境安装了哪些第三方库 pip list | grep PyMysql

    使用

    1. import pymysql

    连接数据库

    使用connect函数创建连接对象,此连接对象提供关闭数据库、事务回滚等操作

    一般传参为:host, user, password, port(默认为3306), database(想要连接的数据库名)

    1. db = pymysql.connect(host='127.0.0.1',
    2. user='root',
    3. password='pwd',
    4. database='database_name')

    连接对象的常见方法

    方法名 说明
    cursor() 获取游标对象,操作数据库,如执行DML操作,调用存储过程等
    commit() 提交事务
    rollback() 回滚事务
    close() 关闭数据库连接

    操作数据库

    操作数据库主要使用cursor游标对象,对数据库进行操作

    cursor游标对象的常见方法

    方法名 说明
    close() 关闭当前游标对象
    execute(query) 执行数据库操作,如sql语句或数据库命令
    executemany(query,params) 用于批量操作,如:批量更新
    fetchone() 获取查询结果集中的下一条记录
    fetchmany(size) 获取查询结果集中指定数量的记录,size默认为1
    fetchall() 获取查询结果集中所有记录
    nextset() 跳至下一个可用的结果集

    fetchone(),fetchmany(size),fetchall() 三者的返回值都是元组 或 元组的嵌套 查

    查询主要获取结果集,注意fetchone 得到的是元组, fetchmany(size),fetchall()得到的是元组的嵌套

    注意:

    如果既要使用python的字符串解析%,sql语句中又包含sql的模糊查询占位符%, 模糊查询使用%%即可,这样不会报错

    1. import pymysql
    2. # 创建数据库连接对象
    3. db = pymysql.connect(host='127.0.0.1',
    4. user='root',
    5. password='pwd',
    6. database='database_name')
    7. # 创建游标对象
    8. cursor = db.cursor()
    9. table_name = 'map_point'
    10. sql = "SELECT * FROM %s WHERE username LIKE 'DL%%' " % table_name
    11. try:
    12. cursor.execute(sql) # 执行sql语句,也可执行数据库命令,如:show tables
    13. result = cursor.fetchall() # 所有结果
    14. print(result)
    15. except Exception as e:
    16. db.rollback()
    17. print("查询失败")
    18. print(e)
    19. finally:
    20. cursor.close() # 关闭当前游标
    21. db.close() # 关闭数据库连接

    循环查询:

    在一些场景中,需要进行循环查询,判断,此时在执行完execute查询语句后,务必进行commit提交,否则每次查询到的数据都是之前查询结果的快照,也就是旧数据。

    或者采用第二种方案,创建connect连接时,增添autocommit=True属性,自动进行commit提交。

    增,删,改

    增删改需要有提交事务的操作,查不需要提交事务,但如果循环查询,务必提交事务,否则结果都是重复的

    创建连接对象——db= pymysql()

    创建cursor游标对象——cur = db.cursor()

    数据操作——cur.execute(sql)

    提交连接事务——db.commit()

    关闭cursor游标对象——cur.close()

    关闭连接对象——db.close( )

    1. import pymysql
    2. # 创建数据库连接对象
    3. db = pymysql.connect(host='127.0.0.1',
    4. user='root',
    5. password='pwd',
    6. database='database_name')
    7. # 创建游标对象
    8. cursor = db.cursor()
    9. table_name = 'table_name '
    10. user_id = 'yyy'
    11. user_no = 'xxx'
    12. sql = "UPDATE %s SET user_no = '%s' WHERE user_id = '%s'" % (table_name, user_no, user_id)
    13. try:
    14. cursor.execute(sql) # 执行sql语句,也可执行数据库命令,如:show tables
    15. db.commit() # 增删改,必须执行事务
    16. print("数据更新成功")
    17. except Exception as e:
    18. db.rollback() # 若出现失败,进行回滚
    19. print("数据更新失败")
    20. print(e)
    21. finally:
    22. cursor.close() # 关闭当前游标
    23. db.close() # 关闭数据库连接

    使用循环批量更新

    1. db = pymysql.connect(host='127.0.0.1',
    2. user='root',
    3. password='pwd',
    4. database='database_name')
    5. table_name = 'table_name'
    6. update_list = ['xxx2', 'xxxx3']
    7. condition_list = ['xxx', 'xxx1']
    8. # 条件集合,更新集合长度相等时可使用,可根据其他情况重新编写
    9. cursor = db.cursor()
    10. for i in range(len(condition_list)):
    11. sql = "UPDATE %s SET user_no = '%s' WHERE user_id = '%s'" % (table_name, update_list[i],
    12. condition_list[i])
    13. print('执行sql语句:' + sql)
    14. try:
    15. cursor.execute(sql)
    16. db.commit()
    17. print("数据更新成功" + str(i+1) + '条')
    18. except Exception as e:
    19. db.rollback()
    20. print("数据更新失败")
    21. print(e)
    22. cursor.close()
    23. db.close()

    使用executemany(query, param) 批量更新

    params为每条记录的维度,可为嵌套数组和元组

    注意:sql语句中需要更改的数据不管什么类型,统一使用%s作为占位符,不需要加引号

    1. # 创建数据库连接对象
    2. db = pymysql.connect(host='127.0.0.1',
    3. user='root',
    4. password='pwd',
    5. database='database_name')
    6. # 创建游标对象
    7. cursor = db.cursor()
    8. update_list = ['a', 'b']
    9. condition_list = ['a1', 'b1']
    10. # 条件数组和需要更新的数据数组是分开的,因为param需要以每条的维度,所以可以使用拉链函数合并
    11. params = zip(update_list, condition_list) # 或 param = [['a', 'a1'], ['b', 'b1']]
    12. sql = "UPDATE map_point SET storageLocation_no = %s WHERE position_id = %s" # 注意 这里的 占位%s 都不用加引号
    13. try:
    14. cursor.executemany(sql, params) # 执行sql语句
    15. db.commit() # 执行事务
    16. print("数据批量更新成功")
    17. except Exception as e:
    18. db.rollback()
    19. print("数据更新失败")
    20. print(e)
    21. finally:
    22. cursor.close() # 关闭当前游标
    23. db.close() # 关闭数据库连接

    以上就是python数据库操作之PyMysql怎么使用的详细内容,更多关于python数据库操作之PyMysql怎么使用的资料请关注九品源码其它相关文章!