Python脚本之连接MySQL【四】

本文为博主原创,未经授权,严禁转载及使用。
本文链接:https://blog.csdn.net/zyooooxie/article/details/124640412

之前写了篇 Python脚本之连接MySQL【三】,日常使用过程中,代码实际有很多改动,特此更新;

【实际这篇博客推迟发布N个月】

个人博客:https://blog.csdn.net/zyooooxie

【以下所有内容仅为个人项目经历,如有不同,纯属正常】

Cursor类的nextset()、_nextset()

https://peps.python.org/pep-0249/#nextset

Cursor.nextset()This method will make the cursor skip to the next available set, discarding any remaining rows from the current set.If there are no more sets, the method returns None. Otherwise, it returns a true value and subsequent calls to the .fetch*() methods will return rows from the next result set.

在这里插入图片描述

方法优化【2】

【读取ini配置文件 + 建立、关闭数据库连接】

@filename: db.ini

[zyooooxie_db]
user = user_zy
host = host_zy
passwd = passwd_zy
database = database_zy
"""
@blog: https://blog.csdn.net/zyooooxie
@qq: 153132336
@email: zyooooxie@gmail.com
"""from pymysql.connections import Connection
from pymysql.cursors import Cursor
from pymysql.constants import CLIENTdef read_ini(ini_path: str = 'db.ini'):"""读取配置文件:param ini_path:默认是数据库的配置文件:return:"""if os.path.isfile(ini_path):config = ConfigParser()config.read(ini_path, encoding='UTF-8')return {cf: config.items(cf) for cf in config.sections()}def connect_db(db_name: str) -> (Connection, Cursor):"""建立链接,传参为 具体的db:param db_name::return:"""ini_dict = read_ini()if db_name in ini_dict:res_list = ini_dict.get(db_name)res_dict = dict(res_list)else:raise Exception('传参不合法')db = pymysql.connect(port=3306, charset='utf8', autocommit=True, client_flag=CLIENT.MULTI_STATEMENTS,use_unicode=True, **res_dict)  # client_flag传值:默认可以同时执行多条sql语句的cur = db.cursor()Log.debug('{} connect'.format(db_name))return db, curdef close_db(db: Connection, cur: Cursor):"""断开连接:param db::param cur::return:"""cur.close()db.close()Log.debug('connect close')

exe_sql()、fetch_sql()、fetch_sqls()

"""
@blog: https://blog.csdn.net/zyooooxie
@qq: 153132336
@email: zyooooxie@gmail.com
"""def exe_sqls(sql: str, db_name: str, db: Connection = None, cur: Cursor = None):"""多条sql语句-execute():param sql::param db_name::param db::param cur::return:"""exe_sql(sql=sql, db_name=db_name, db=db, cur=cur)def exe_sql(sql: str, db_name: str, exe_mode: str = None, data_list: list or tuple = None,db: Connection = None, cur: Cursor = None):"""1条sql语句-execute()、executemany():param sql::param db_name::param exe_mode::param data_list::param db::param cur::return:"""if not bool(cur):db_use, cur_use = connect_db(db_name=db_name)else:db_use, cur_use = db, curLog.info(sql)if data_list is None and exe_mode is None:try_str = """cur_use.execute(sql)"""elif exe_mode == 'execute' and data_list is not None:assert sql.find('(%s') != -1try_str = """cur_use.execute(sql, data_list)"""elif exe_mode == 'executemany' and data_list is not None:assert sql.find('(%s') != -1try_str = """cur_use.executemany(sql, data_list)"""else:Log.error('{}--{}'.format(exe_mode, data_list))raise Exception('Execute Error')try:result = eval(try_str, locals())except Exception as e:db_use.rollback()Log.error(e.args)Log.info(traceback.format_exc())result = FalseLog.error('sql执行有问题')else:execute_sql_result_check(result)finally:if not bool(cur):close_db(db=db_use, cur=cur_use)def execute_sql_result_check(result):"""SQL Execute结果检查:param result::return:"""if not result:Log.error('{}-Number of affected rows'.format(result))else:Log.debug('Execute Succeed:{}'.format(result))def fetch_sqls(sql: str, db_name: str, db: Connection = None, cur: Cursor = None) -> List[tuple]:"""多条sql语句-fetchall():param sql::param db_name::param db::param cur::return:"""if not bool(cur):db_use, cur_use = connect_db(db_name=db_name)else:db_use, cur_use = db, curLog.info(sql)try:data = list()cur_use.execute(sql)data.append(cur_use.fetchall())# while True:##     if cur_use.nextset():#         data.append(cur_use.fetchall())##     else:#         breakwhile cur_use.nextset():data.append(cur_use.fetchall())except Exception as e:db_use.rollback()Log.debug(e.args)Log.info(traceback.format_exc())data = FalseLog.error('sql执行有问题')else:for d in data:fetch_sql_result_check(d)finally:if not bool(cur):close_db(db=db_use, cur=cur_use)return datadef fetch_sql(sql: str, db_name: str, fetch_mode: str = 'fetchall', db: Connection = None, cur: Cursor = None):"""1条sql语句-fetchone()、fetchall():param sql::param db_name::param fetch_mode::param db::param cur::return:"""if not bool(cur):db_use, cur_use = connect_db(db_name=db_name)else:db_use, cur_use = db, curLog.info(sql)if fetch_mode == 'fetchall':try_str = """cur_use.fetchall()"""elif fetch_mode == 'fetchone':  # 很少用到try_str = """cur_use.fetchone()"""else:Log.error('fetch_mode: {}'.format(fetch_mode))raise Exception(fetch_mode)try:cur_use.execute(sql)data = eval(try_str, locals())except Exception as e:db_use.rollback()Log.debug(e.args)Log.info(traceback.format_exc())data = FalseLog.error('sql执行有问题')else:fetch_sql_result_check(data)finally:if not bool(cur):close_db(db=db_use, cur=cur_use)return datadef fetch_sql_result_check(result):"""SQL Fetch结果检查:param result::return:"""if not result:Log.error('{}-Fetch Nothing'.format(result))else:Log.debug('Fetch Succeed')

实际应用【2】

"""
@blog: https://blog.csdn.net/zyooooxie
@qq: 153132336
@email: zyooooxie@gmail.com
"""def test_0801():from XXX_use.common_mysql import fetch_sql, connect_db, close_db, fetch_sqls, exe_sql, exe_sqlsdb_, cur_ = connect_db(db_name='zy_db')sql = """SELECT  *  FROM `table_c_r`    ORDER BY `update_date` DESC ;"""data = fetch_sql(sql=sql, db_name='zy_db', fetch_mode='fetchall', db=db_, cur=cur_)Log.info(data)data = fetch_sql(sql=sql, db_name='zy_db', fetch_mode='fetchone', db=db_, cur=cur_)Log.info(data)data = fetch_sql(sql=sql, db_name='zy_db', db=db_, cur=cur_)Log.info(data)sql = """SELECT  *  FROM `table_c_r_g_m_s`    ORDER BY `update_date` DESC LIMIT 50 ;# 这条sql查不到数据SELECT  *  FROM `table_c_b_r_r`  WHERE   `delete_flag` = 1   ORDER BY `update_date` DESC  ; SELECT  *  FROM `table_c_r`    ORDER BY `update_date` DESC LIMIT 1;"""res = fetch_sqls(sql=sql, db_name='zy_db', db=db_, cur=cur_)Log.info(res)data_list = [('TEST0801' + 'ZYOOOOXIE_' + str(i), 'Name' + str(i), 'zyooooxie') for i inrandom.sample(range(500), 10)]Log.info(data_list)sql = """insert into `table_c_g_c`     (`c_i`, `name`, `owner`) VALUES   (%s, %s, %s);"""exe_sql(sql=sql, db_name='zy_db', exe_mode='executemany', data_list=data_list, db=db_, cur=cur_)exe_sql(sql=sql, db_name='zy_db', exe_mode='execute', data_list=data_list[-1], db=db_, cur=cur_)sql = """insert into `table_c_g_c`     (`c_i`, `name`, `owner`) VALUES     ('TEST0801ZYOOOOXIE_11','Name_11', 'zyooooxie') ; insert into table_c_y_a    (username, password)values    ('TEST0801_11', 'pwd_11');insert into `table_c_g_c`    (`c_i`, `name`, `owner`) VALUES     ('TEST0801ZYOOOOXIE_12','Name_12', 'zyooooxie') ;    """exe_sql(sql=sql, db_name='zy_db', db=db_, cur=cur_)exe_sqls(sql=sql, db_name='zy_db', db=db_, cur=cur_)sql_ = """DELETE FROM `table_c_g_c` WHERE c_i LIKE 'TEST0801%' ;DELETE FROM `table_c_y_a` WHERE username LIKE 'TEST0801%' ;DELETE FROM `table_c_y_a` WHERE username LIKE 'TEST080808%' ;"""exe_sql(sql=sql_, db_name='zy_db', db=db_, cur=cur_)exe_sqls(sql=sql_, db_name='zy_db', db=db_, cur=cur_)close_db(db_, cur_)

本文链接:https://blog.csdn.net/zyooooxie/article/details/124640412

个人博客 https://blog.csdn.net/zyooooxie

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/37298.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云SMS,APi接口返回错误码

API错误码 更新时间:2023-06-29 16:33提交缺陷 产品详情 相关技术圈 我的收藏 调用API接口失败时,会返回错误码。本文档为您提供API接口错误码列表,请根据错误码和对应错误信息排查问题。 错误码(Code) 错误信息…

【先进PID控制算法(ADRC,TD,ESO)加入永磁同步电机发电控制仿真模型研究(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

EJB基本概念和使用

一、EJB是什么? EJB是sun的JavaEE服务器端组件模型,是一种规范,设计目标与核心应用是部署分布式应用程序。EJB2.0过于复杂,EJB3.0的推出减轻了开发人员进行底层开发的工作量,它取消或最小化了很多(以前这些是必须实现)…

如何使用Flask-RESTPlus构建强大的API

如何使用Flask-RESTPlus构建强大的API 引言: 在Web开发中,构建API(应用程序接口)是非常常见和重要的。API是一种允许不同应用程序之间交互的方式,它定义了如何请求和响应数据的规范。Flask-RESTPlus是一个基于Flask的…

定量分析计算51单片机复位电路工作原理 怎么计算单片机复位电容和电阻大小

下面画出等效电路图 可以知道单片机内必然有一个电阻RX,为了简化分析,我们假设他是线性电阻(不带电容,电感的支路) 还有一个基础知识: 电容器的充电放电曲线: 还需要知道电容电压的变化是连续…

微信小程序data-item设置获取不到数据的问题

微信小程序data-item设置获取不到数据的问题 简单说明: 在微信小程序中,通过列表渲染使用wx:for根据数组中的每一项重复渲染组件。同时使用bindtap给每一项绑定点击事件clickItem,再通过data-item绑定数据。 **问题:**通过data-i…

观察者模式实战

场景 假设创建订单后需要发短信、发邮件等其它的操作,放在业务逻辑会使代码非常臃肿,可以使用观察者模式优化代码 代码实现 自定义一个事件 发送邮件 发送短信 最后再创建订单的业务逻辑进行监听,创建订单 假设后面还需要做其它的…

常见的一些BUG

常见的一些BUG,但实际上在编写代码时,我们应该尽可能避免这些类型的错误: 变量名与函数名冲突: def main(): print("Hello, World!") main 5 print("The value of main is:", main) 函数参数传递错误&…

取个对象值导致系统崩溃

取个对象值导致系统崩溃 前言 想必各位小伙经常在项目中遇到一些错误,取对象值的时候,经常报错,又或者某些项目突然就挂经常都是出现在一些对象取值上面,然后就被领导一顿训斥 报错分析 例如: 下面这个报错大家想必不会陌生&am…

最大交换(力扣)枚举 JAVA

给定一个非负整数,你至多可以交换一次数字中的任意两位。返回你能得到的最大值。 示例 1 : 输入: 2736 输出: 7236 解释: 交换数字2和数字7。 示例 2 : 输入: 9973 输出: 9973 解释: 不需要交换。 注意: 给定数字的范围是 [0, 10^8] 解题思路: 1、数最…

【量化课程】08_2.深度学习量化策略基础实战

文章目录 1. 深度学习简介2. 常用深度学习模型架构2.1 LSTM 介绍2.2 LSTM在股票预测中的应用 3. 模块分类3.1 卷积层3.2 池化层3.3 全连接层3.4 Dropout层 4. 深度学习模型构建5. 策略实现 1. 深度学习简介 深度学习是模拟人脑进行分析学习的神经网络。 2. 常用深度学习模型架…

山东布谷科技直播软件源码Nginx服务器横向扩展:搭建更稳定的平台服务

在直播软件源码平台中,服务器扮演着重要的角色,关系着视频传输、数据处理、用户管理等工作的顺利完成。随着互联网的迅猛发展,直播行业也随之崛起,全世界的人们都加入到了直播软件源码平台中,用户流量的增加让服务器的…

视频高效剪辑,轻松平均分割视频,生成高质量M3U8

您是否在处理视频剪辑时常常面临繁琐的切分工作?是否希望能够快速而精准地平均分割视频,并生成适用于在线播放的高质量m3u8文件?现在,我们的智能视频剪辑大师为您提供了一种简便而高效的解决方案!无需复杂操作&#xf…

Leaflet入门,Leaflet如何实现vue双向绑定数据添加到图片标记物到地图上,动态根据vue数据更新到地图上以及鼠标经过标记物显示提示框

前言 本章使用Leaflet的vue2-leaflet或者vue-leaflet插件方式实现vue数据绑定地图数据,实现地图标记物与vue数据的双向联动更新,以及鼠标经过标记物显示提示框功能。 实现效果演示 vue如何使用Leaflet vue2如何使用:《Leaflet入门,如何使用vue2-leaflet实现vue2双向绑定…

HOT97-多数元素

leetcode原题链接:多数元素 题目描述 给定一个大小为 n 的数组 nums ,返回其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。你可以假设数组是非空的,并且给定的数组总是存在多数元素。 示例 1: 输入&…

基于java的Word自动出题系统设计与实现

摘 要: 学校作为社会之中最大的人才的培养和过度的机构,源源不断的为社会的发展提供者各种各样的人才。它不仅教授学生知识还教授他们一些在社会之中生存的本领和社会之中的道德规范,并且约束他们的行为。在我国现行的教育体系之中&#xff0…

【量化课程】02_3.投资学基础概念

文章目录 1. 投资和投资学的关系1.1 什么是投资?1.2 什么是投资学? 2. 投资学的主要内容2.1 金融市场与投资环境2.1.1 金融资产2.1.2 债券市场的意义2.1.3 金融市场与经济2.1.4 投资过程2.1.5 竞争性的市场2.1.6 市场参与者2.1.7 主要的市场债券市场外汇…

Stable Diffusion 插件开发经验

Stable Diffusion近来大热,但是插件开发的资料少之又少。 这里提供一些插件开发的经验,可供参考。 1.替换启动页。 如果你想要在运行Stable Diffusion的基础上想要一些独有的操作,不想要进行裁剪,直接替换启动页面,那么就需要在webui中进行替换 这里modules.ui.create_ui…

1.4 数据库管理与优化

数据库管理与优化 文章目录 数据库管理与优化1. 数据库概述1.1 数据库的定义和作用1.2 数据库管理系统(DBMS) 2. 数据库模型2.1 关系型数据库**2.2 非关系型数据库 3. 数据库设计3.1 数据库设计原则3.2 数据库设计步骤 4. 数据库优化4.1 数据库性能优化4…

基于ipad协议的gewe框架进行微信群组管理(二)

友情链接 geweapi.com 点击访问即可。 获取群组详情 小提示: 该接口可以一次查询20个群组查询出来的信息是不带公告的 请求URL: http://域名地址/api/group/detail 请求方式: POST 请求头: Content-Type:applica…