0、python 与 mysql 连接(增删改查)

python 与 mysql 连接(增删改查)_Jack_2085的博客-CSDN博客1、查询数据库的某一张表#!/usr/bin/python# -*- coding: UTF-8 -*-# 查询数据库的某一张表import MySQLdbdb = ""def mysql_conn(): global db try: # 打开数据库连接 db = MySQLdb.connect("localhost", "root", "dong2025", "mysql8", charset='utf8') #https://blog.csdn.net/weixin_54217632/article/details/121078913?csdn_share_tail=%7B%22type%22%3A%22blog%22%2C%22rType%22%3A%22article%22%2C%22rId%22%3A%22121078913%22%2C%22source%22%3A%22weixin_54217632%22%7D

0.1、

0.2、

0.3、

1、解释说明:读数据库数据,转换成字典;取excel数据数据,转换成字典;再写一个对比两个字典的方法。

1.1、封装的类(里面不需要动)

import pandas as pd
import pymysql
import openpyxlclass sql_excel:# 通过类的__init__函数,初始化数据def __init__(self, data_sql, excel_path, col_start, col_end):self.data_sql = data_sqlself.excel_path = excel_pathself.col_start = col_startself.col_end = col_end# sql_data 查询数据库数据def sql_for(self):db = ""dc_dict = {}try:# 打开数据库连接db = pymysql.connect(host="192...........",port=3306,user="root",password="root123",database="zh..........",charset="utf8",)sql = self.data_sqldf_sql = pd.read_sql(sql, db)# 取出全部行,迭代输出,保存在字典中。for index, row in df_sql.iterrows():dc_dict[list(row.values)[0]] = list(row.values)[1:]# 返回数据库字典return dc_dictexcept:# Rollback in case there is any errordb.rollback()finally:db.close()# 取出excel的值,迭代输出,保存在字典中(按行迭代输出)def pc_for(self):# 路径参数str_path = self.excel_pathwb_pc = openpyxl.load_workbook(str_path)ws_pc = wb_pc.activedictA_pc = {}dict_tile_pc = ""# 指定区域中的位置col_start = self.col_startcol_end = self.col_endfor row in ws_pc[col_start: col_end]:# 遍历每一行中的每一单元格x = 0listS_pc = []for c in row:x += 1if x == 1:dict_tile_pc = c.valueelse:listS_pc.append(c.value)dictA_pc[dict_tile_pc] = listS_pcreturn dictA_pc# 数据库sql与excel对比def dict_compare(self):global key# 保存缺少行value(错误信息保存)listS = []# 保存缺少行名(错误信息保存)listL = []str1 = self.pc_for()str2 = self.sql_for()# 1、先输出一个其中一个字典的key和values# 2、直接拿着这个values和另一个字典中的的values对比。# 3、str2[key][list_i]可以先通过key,拿到一个字典的value# 4、两个value的值确定了,就可以比较了。把错误信息保存在list列表中。try:for key, value in str1.items():for list_i, list_value in enumerate(value):if list_value != str2[key][list_i]:li_error = key, ":", list_valuelistS.append(li_error)except:listL.append(key)#  判断excel是否定位正确try:if key is None:return "excel 定位错误"else:return "行value错误:", listS, "缺少行名:", listLexcept:return "excel 定位错误"

1.2、调用封装的类,对比数据(单次调用)。

import srcd.t_data.py_sql_excel as pyResultsql = "select *, sum(ta.20GP+ta.20RF+ta.40RF+ta.40HC+ta.40RH) as 'TEU', " \"concat((Round(((sum(ta.20GP+ta.20RF+ta.40RF+ta.40HC+ta.40RH)/" \"sum(ta.20GP+ta.20RF+ta.40RF+ta.40HC+ta.40RH+ta.20n+ta.40n+ta.tsn))*100),2)),'%') as 'zhanbi' " \"from( " \"select t.company_name as 'company_n1',SUM(t.actual_num) as 'actual_n1', " \"sum(CASE t.boxType WHEN '20GP' THEN 1  ELSE 0   END) as '20GP'," \"sum(CASE t.boxType WHEN '20RF' THEN 1  ELSE 0   END) as '20RF', " \"sum(CASE t.boxType WHEN '40RF' THEN 1  ELSE 0   END) as '40RF', " \"sum(CASE t.boxType WHEN '40HC' THEN 1  ELSE 0   END) as '40HC', " \"sum(CASE t.boxType WHEN '40RH' THEN 1  ELSE 0   END) as '40RH', " \"sum(CASE t.boxType WHEN '20' THEN 1  ELSE 0   END) as '20n', " \"sum(CASE t.boxType WHEN '40' THEN 1  ELSE 0   END) as '40n', " \"sum(CASE t.boxType WHEN '特殊' THEN 1  ELSE 0   END) as 'tsn' " \"from dm_container_volume t " \"GROUP BY t.company_name) ta " \"group by ta.company_n1"str_path = "./dataFile/pc_for.xlsx"
col_start = "B3"
col_end = "M4"result_se = pyResult.sql_excel(sql, str_path, col_start, col_end).dict_compare()
print(result_se)

1.2、用for循环通过取字典的k,v值,来对比多张不同维度的报表

import srcd.t_data.py_sql_excel as pyResult
import time# 用for循环通过去字典的k,v值,来对比多张不同维度的报表
zd_str_path = {"company_name": "./dataFile/pc_for.xlsx"}
for zd, str_path in zd_str_path.items():sql = "select *, sum(ta.20GP+ta.20RF+ta.40RF+ta.40HC+ta.40RH) as 'TEU', " \"concat((Round(((sum(ta.20GP+ta.20RF+ta.40RF+ta.40HC+ta.40RH)/" \"sum(ta.20GP+ta.20RF+ta.40RF+ta.40HC+ta.40RH+ta.20n+ta.40n+ta.tsn))*100),2)),'%') as 'zhanbi' " \"from( " \f"select t.{zd} as 'company_n1',SUM(t.actual_num) as 'actual_n1', " \"sum(CASE t.boxType WHEN '20GP' THEN 1  ELSE 0   END) as '20GP'," \"sum(CASE t.boxType WHEN '20RF' THEN 1  ELSE 0   END) as '20RF', " \"sum(CASE t.boxType WHEN '40RF' THEN 1  ELSE 0   END) as '40RF', " \"sum(CASE t.boxType WHEN '40HC' THEN 1  ELSE 0   END) as '40HC', " \"sum(CASE t.boxType WHEN '40RH' THEN 1  ELSE 0   END) as '40RH', " \"sum(CASE t.boxType WHEN '20' THEN 1  ELSE 0   END) as '20n', " \"sum(CASE t.boxType WHEN '40' THEN 1  ELSE 0   END) as '40n', " \"sum(CASE t.boxType WHEN '特殊' THEN 1  ELSE 0   END) as 'tsn' " \"from dm_container_volume t " \f"GROUP BY t.{zd}) ta " \"group by ta.company_n1"col_start = "B3"col_end = "M4"result_se = pyResult.sql_excel(sql, str_path, col_start, col_end).dict_compare()time.sleep(2)print(result_se)

2、pandas 遍历 dataframe 行数据

import pandas as pd
inp = [{'c1':10, 'c2':100}, {'c1':11,'c2':110}, {'c1':12,'c2':120}]
df = pd.DataFrame(inp)
print(df)# pandas 遍历 dataframe 行数据
for index, row in df.iterrows():print(index,row[0],row[1],)# pandas 遍历 dataframe 列数据
for x in df.loc[:,'c1']:print(x)

3、 pandas抽取行列数据_zhf的博客-CSDN博客_pandas取列值https://blog.csdn.net/weixin_43283397/article/details/104263743

4、

4.1、创建一个字典,把数据放在字典里,字段名称是key,字段内容是values(也可以理解成迭代输出列,并保存字典中)

4.2、pymysql,pandas,mysql一起来操作数据库,并保存在excel中

import pandas as pd
import pymysqldb = ""def mysql_conn():global dbtry:# 打开数据库连接db = pymysql.connect(host="localhost",port=3306,user="root",password="dong2025",database="mysql8",charset="utf8",)sql = "SELECT * FROM BOOK"df_sql = pd.read_sql(sql, db)# return df_sql  # 展示所有结果return df_sql.head()  # 默认展示前5行# return df_sql.head(2)  # 展示前2行# return df_sql.shape   # 统计行和列数。# return df_sql.info()  # info()方法可以查看数据表中的数据类型# return df_sql.describe()  # 对BOOK表的描述except:# Rollback in case there is any errordb.rollback()finally:db.close()my_con = mysql_conn()
my_con.to_excel("C:/Users/Administrator/Desktop/123456/202201101647.xlsx")
print(my_con)
print("***************************")# 创建一个字典,把数据放在字典里,字段名称是key,字段内容是values
t_dict = {}
for x, y in my_con.items():print("x=", x, "y=", list(y.values))t_dict[x] = list(y.values)
print("t_dict=", t_dict)
print("**********************")# 根据字段名称取数据
print(my_con["book_name"] + " " + my_con["writer"])

5、 case  when的用法详解

SQL之CASE WHEN用法详解__Rt-CSDN博客_case when用法https://blog.csdn.net/rongtaoup/article/details/82183743

5.1、自己写的例子:

5.2、根据上面的图片,生成虚拟的列(不需要分组)

select sum(CASE WHEN t.score< 60 THEN 1 ELSE 0 END) as "小于60(不包含60)",sum(CASE WHEN 60<=t.score and t.score< 80 THEN 1 ELSE 0 END) as "大于60小于80(包含60,不包含80)",sum(CASE WHEN 80<=t.score and t.score< 100 THEN 1 ELSE 0 END) as "大于80小于100(不包含100,包含80)"
from student_table t

生成效果:

5.3、生成虚拟的行(需要分组)

select (CASE WHEN t.score<60 THEN "小于60(不包含60)"WHEN t.score<80 THEN"大于60小于80(包含60,不包含80)"WHEN t.score<100 THEN"大于80小于100(不包含100,包含80)"ELSE"其他"
END) as score_levev, count(t.id)  as stu_cnt
from student_table t
GROUP BY
(CASE WHEN t.score<60 THEN"小于60(不包含60)"WHEN t.score<80 THEN"大于60小于80(包含60,不包含80)"WHEN t.score<100 THEN"大于80小于100(不包含100,包含80)"ELSE"其他"
END)

sql语句优化方案如下:

-- ====================================== 优化方案1
select c.leibie,count(*) as "数量" from
(select CASE
    WHEN score<60 THEN
        "小于60(不包含60)"
    WHEN 60<=score and score<80 THEN
        "大于60小于80(包含60,不包含80)"
    WHEN 80<=score and score<100 THEN
        "大于80小于100(包含80,包含100)"
    ELSE
        "其他"
END as "leibie"
from a)c
group by c.leibie

-- ===================================优化方案2

select c.leibie,count(*) as "数量" from
(select CASE
    WHEN score<60 THEN
        "小于60(不包含60)"
    WHEN score<80 THEN
        "大于60小于80(包含60,不包含80)"
    WHEN score<100 THEN
        "大于80小于100(包含80,包含100)"
    ELSE
        "其他"
END as "leibie"
from a)c
group by c.leibie

6、case when的用法

里面还有数据库脚本

case when 的用法举例说明_Jack_2085-CSDN博客https://blog.csdn.net/weixin_54217632/article/details/122510989?spm=1001.2014.3001.5501

case when代码例子说明:


--  ---- 1、虚拟多列的需要用把case when分开单独写。
--  ---- 2.1、虚拟一列内容需要通过判断填写的,比如性别列,
--  ---- 2.2、内容需要填写(男/女),可以把casewhen写在一起,
--  ---- 2.3、一个end结束符,一个as 别名就ok了,
--  ---- 2.4、根据不同情况,用不同方法。-- -------------------- 实现方法(完整版写法)
-- --------------------  ELSE 0  也可以不要select *,
sum(ta.20GP+ta.20RF+ta.40RF+ta.40HC+ta.40RH) as 'TEU',
concat((Round(((sum(ta.20GP+ta.20RF+ta.40RF+ta.40HC+ta.40RH)/
sum(ta.20GP+ta.20RF+ta.40RF+ta.40HC+ta.40RH+ta.20n+ta.40n+ta.tsn))*100),2)),'%') as 'zhanbi'
from(
select t.company_name as 'company_n1',SUM(t.actual_num) as 'actual_n1', sum(CASE t.boxType WHEN '20GP' THEN 1  ELSE 0   END) as '20GP',sum(CASE t.boxType WHEN '20RF' THEN 1  ELSE 0   END) as '20RF',sum(CASE t.boxType WHEN '40RF' THEN 1  ELSE 0   END) as '40RF',sum(CASE t.boxType WHEN '40HC' THEN 1  ELSE 0   END) as '40HC',sum(CASE t.boxType WHEN '40RH' THEN 1  ELSE 0   END) as '40RH',sum(CASE t.boxType WHEN '20' THEN 1  ELSE 0   END) as '20n',sum(CASE t.boxType WHEN '40' THEN 1  ELSE 0   END) as '40n',sum(CASE t.boxType WHEN '特殊' THEN 1  ELSE 0   END) as 'tsn'
from dm_container_volume t
GROUP BY t.company_name) ta
group by ta.company_n1

7、

8、

9、

10、

11、

12、

13、

14、

15、

16、

17、

18、

19、

20、

21、

22、

23、

24、

25、

26、

27、

28、

29、

30

数据库数据 与 excel 对比。(项目一)相关推荐

  1. 数据库数据用Excel导出的3种方法

    数据库数据用Excel导出的3种方法 分类: .Net 2008-06-30 11:07 173人阅读 评论(2) 收藏 举报 将数据库数据用Excel导出主要有3种方法:用Excel.Applica ...

  2. Python读取数据库数据写入Excel

    Python读取数据库数据写入Excel 本文示例: 读取数据库数据 创建Excel文件,并创建指定名称的sheet页 将数据库数据写入创建的sheet页中 保存文件 示例代码: # -*- codi ...

  3. oracle导出一个表数据库,excel怎么导出多个表格数据库数据-一个excel表格中有多个sheet,如何将其导入oracle数......

    一个excel表格中有多个sheet,如何将其导入oracle数... 解决方案如下: 可以新建一个查询,查询你所说的2个表中的所有数据 运行查询,这样查询结果就包含了你要的数据,再把查询结果导出 就 ...

  4. java 对excel操作 读取、写入、修改数据;导出数据库数据到excel

    ============前提加入jar包jxl.jar========================= // 从数据库导出数据到excel  public List<Xskh> outP ...

  5. java struts2 excel上传_Java Struts2 实现数据库数据导出Excel文件

    HTML: 导出 Struts.xml true application/vnd.ms-excel;charset=GBK excelStream attachment;filename=${file ...

  6. ASP.NET中数据库数据导入Excel并打印

    众所周知,WEB上的打印是比较困难的,常见的WEB上打印的方法大概有三种: 1.直接利用IE的打印功能.一般来说,这种方法可以做些扩展,而不是单单的调用javascript:print()这样简单,比 ...

  7. java数据生成excel_Java 数据库数据生成Excel

    采用jxl.jar生成Excel 项目开发注意事项: 1:导入从网上下载的jar包: mail.jar 和 activation.jar 2:删掉C:\Program Files\MyEclipse\ ...

  8. excel html 查询,html 连接 excel表格数据库数据-利用EXCEL表格为数据库制作查询网页...

    请教如何将HTML中有链接的数据提取到EXCEL表格里? 将网页中的数据拷贝到excel表格中,默认是全部选中的,您只要单击鼠标右键选择删除超链接即可(此操作在excel2010上测试通过) 请问EX ...

  9. 将数据库数据导入Excel表格

    目录 导入依赖 生成表格代码 导入依赖 <dependency><groupId>org.apache.poi</groupId><artifactId> ...

最新文章

  1. 范成法加工matlab_光学非球面技术原理与加工技术
  2. supermap iobect .net 7.1.2 图例的拆分
  3. autocad.net中ResultBuffer相关的常量值
  4. 如何查询当前表空间下所有实例_详解人大金仓MPP数据库并行查询技术
  5. PHP快速导入,php快速导入大量数据的实例方法
  6. 20个非常棒的Jquery实用工具 [转]
  7. Manacher's algorithm: 最长回文子串算法
  8. 查看及修改当前数据库的所支持的数据库引擎以及默认数据库引擎
  9. 491. 递增子序列
  10. Shell脚本的模块化和脚本复用
  11. mysql8.0 linux 安装
  12. 解决Maven下载慢的问题
  13. 快速记住《计算机文化基础》海量题法
  14. 字符串的常见方法总结
  15. ie不能加载java_解决IE中页面Java无法加载的问题
  16. codeforces1100 F. Ivan and Burgers(线性基)
  17. 购物时,商品加入购物车的飞入效果
  18. utf8版 中文转换成拼音
  19. 前端涨薪必读,node.js入门保姆级教程
  20. 微信小程序实现酒店入住时间区间选择日历

热门文章

  1. 条码打印软件如何修改条码和数字之间的间距
  2. 浙政钉h5微应用开发vue
  3. 202003招银网络科技面经
  4. android车载严格模式解除,Android严格模式
  5. java学习笔记:零基础java学习路线+配套资料+书籍推荐
  6. 水经注有哪些单款地图下载器授权?
  7. IDEA设置类注释模板和方法注释模板
  8. 安卓逆向小案例——某map搜索接口【rpc调用】
  9. TB6600步进电机驱动(包含原理图以及PCB,打样测试可用,性能良好)
  10. Excel函数公式大全—LOOKUP函数