环境

Anaconda3 Python 3.6, Window 64bit

  • 目的

从MySQL数据库读取数据,进行数据查询、关联

  • 代码
# -*- coding: utf-8 -*-

"""
Author: kimbo zhang
Mail: kimbo_zhang@163.com
""" import pymysql
import pandas as pd
import numpy as np db_conn = pymysql.connect(
host="***",
user="kimbo",
passwd="***",
port=3306,
database="kimbo_test",
charset="utf8"
) # 执行sql语句
sql_cmd = "select id,coll_type,coll_amt,coll_cost from kimbo_test;"
sql_cmd2 = "select id,re_type as coll_type,re_amt as coll_amt,re_cost as coll_cost from kimbo_test2;" # 导入数据
data1 = pd.read_sql(sql_cmd, db_conn) # 赋值 kimbo_test
data2 = pd.read_sql(sql_cmd2, db_conn) # 赋值 kimbo_test2 # 1. select 查询
# eg: select * from kimbo_test limit 5;
sl = data1.head(10)
print("查询前10条记录:\n")
print(sl)
print("\n-------------->\n") # 2. 查询类型是:偏低的数据
# eg: select * from kimbo_test where coll_type='偏低';
wh = data1[(data1['coll_type'] == '偏低')]
print(wh) # 3. 查询类型是:偏低和昂贵的数据
# eg:select * from kimbo_test where coll_type in ('偏低','昂贵');
wh2 = data1[(data1['coll_type'] == '偏低') | (data1['coll_type'] == '昂贵')]
print(wh2) # 4. 查询类型是:偏低和昂贵,id 大于7000
# eg: select * from kimbo_test where coll_type in ('偏低','昂贵') and id >5000;
wh3 = data1[((data1['coll_type'] == '偏低') | (data1['coll_type'] == '昂贵')) & (data1['id'] > 5000)]
print(wh3) # 5. 分组、汇总
# eg: select coll_type,sum(coll_amt)as coll_amt,sum(coll_cost)as coll_cost from kimbo_test group by coll_type;
gb = data1.groupby('coll_type').agg({'coll_amt': np.sum, 'coll_cost': np.sum})
print(gb) # 5. 关联 inner join
# eg: select * from kimbo_test a inner join kimbo_test2 b on a.id=b.id ;
jn = pd.merge(data1, data2, on='id')
print(jn) # 6. 关联 left join
# eg: select * from kimbo_test a left join kimbo_test2 b on a.id=b.id ;
jn2 = pd.merge(data1, data1, on='id', how='left')
print(jn2) # 7. 关联 full join
# eg: select * from kimbo_test a full join kimbo_test2 b on a.id=b.id ;
jn3 = pd.merge(data1, data1, on='id', how='outer')
print(jn3) # 8. 合并 union all ,列名需要一致
# eg select * from kimbo_test a union all select * from kimbo_test2 b ;
un2 = pd.concat([data1, data2])
print(un2) # 9. 分析函数
# eg:
# SELECT * FROM (
# SELECT
# t.*,
# ROW_NUMBER() OVER(PARTITION BY coll_type ORDER BY coll_amt DESC) AS rn
# FROM kimbo_test t
# )
# WHERE rn < 3
# ORDER BY rn;
rn = data1.assign(rn=data1.sort_values(['coll_amt'], ascending=False).groupby('coll_type').cumcount() + 1
).query('rn < 3').sort_values(['coll_type', 'rn'])
print("row_number 分析函数结果:")
print(rn)
  • 结果展示

第一个和最后一个结果:

Python SQL相关操作的更多相关文章

  1. python文件相关操作

    Python文件相关操作 打开文件 打开文件,采用open方法,会将文件的句柄返回,如下: f = open('test_file.txt','r',encoding='utf-8') 在上面的代码中 ...

  2. python 集合相关操作

    集合相关操作 集合是一个无序的,不重复的数据组合,它有着两个主要作用:去重以及关系测试. 去重指的是当把一个列表变成了集合,其中重复的内容就自动的被去掉了 关系测试指的是,测试两组数据之间的交集.差集 ...

  3. python集合相关操作

    集合相关操作 集合是一个无序的,不重复的数据组合,它有着两个主要作用:去重以及关系测试. 去重指的是当把一个列表变成了集合,其中重复的内容就自动的被去掉了 关系测试指的是,测试两组数据之间的交集.差集 ...

  4. python PIL相关操作

    项目中需要用python生成二维码,这里记录一下相关PIL相关操作. RGBA问题: 需要将图片A粘贴到图片B上,之前没有注意透明度问题,A的背景是透明的,粘贴到B上后,A的周围是黑的.后来才发现是P ...

  5. Python容器相关操作

    (集合与字典除外)的容器相关操作 (1)容器的拼接 >>> 'abc' + 'def' 'abcdef' (2)容器的重复 >>> (1, 2) * 3 (1, 2 ...

  6. python subprocess相关操作

    python subprocess常用操作 1.subprocess模块的常用函数 函数 描述 subprocess.run() Python 3.5中新增的函数.执行指定的命令,等待命令执行完成后返 ...

  7. python selenium 相关操作

    selenium : 是一个用于Web应用程序测试的工具.Selenium测试直接运行在浏览器中,就像真正的用户在操作一样.支持的浏览器包括IE(7, 8, 9, 10, 11),Mozilla Fi ...

  8. 初学Python——字符串相关操作

    基本字符串操作 Pyhton中字符串的格式化输出在前面已经总结了,接下来介绍一些常用的字符串操作 先定义一个字符变量,以下的操作都以此为例: name=" my name is china ...

  9. python 字典相关操作

    字典 字典的增删改查 字典的创建方式: # 创建字典类型 info = { 'name':'李白', 'age':'25', 'sex':'男' } msg = { 'user01':'Longzel ...

随机推荐

  1. 剑指Offer——用两个栈实现队列

    题目描述: 用两个栈来实现一个队列,完成队列的Push和Pop操作. 队列中的元素为int类型. 分析: 代码: class Solution { public: void push(int node ...

  2. 洛谷 P2073 送花

    这题其实可以用vector水掉! 定义: 记住要用结构体(c为价格,x为美丽值)! 以c排序. struct Node { int x,c; bool operator < (const &am ...

  3. *.hbm.xml映射文件的元素及属性

    1. 每个持久化对象都需要提供一个以类名命名的映射文件,映射文件需要放在和po类同一目录下. 2. 如下是wefepo的映射文件: <hibernate-mapping> <clas ...

  4. 运行hadoop自带的wordcount例子程序

    1.准备文件 [root@master ~]# cat input.txt hello java hello python hello c hello java hello js hello html ...

  5. Linux学习笔记(10)linux网络管理与配置之一——主机名与IP地址,DNS解析与本地hosts解析(1-4)

    Linux学习笔记(10)linux网络管理与配置之一——主机名与IP地址,DNS解析与本地hosts解析 大纲目录 0.常用linux基础网络命令 1.配置主机名 2.配置网卡信息与IP地址 3.配 ...

  6. java-序列化-001-原生介绍

    一.什么是对象序列化 java平台允许我们在内存中创建可复用的Java对象,但一般情况下,只有当JVM处于运行时,这些对象才可能存在,即,这些对象的生命周期不会比JVM的生命周期更长.但在现实应用中, ...

  7. Ubuntu学习笔记1-基本部分

    Vim相当于vi的升级版 Find p*.txt支持查找通配符 Echo 回显命令 echo hello  >1.txt  追加命令,不覆盖 echo hello  >1.txt  覆盖命 ...

  8. 表单向controller传值如果没填controller取到的是null

    jsp前端表单,向controller传数据,如果没有值,后台传入的是null,比如checkbox未选中,后台设置的Integer[] ids,接收到的ids=null,hidden标签如果没有值, ...

  9. Spring 知识点总结

    一.Spring 概述 1. 什么是spring? Spring 是个java企业级应用的开源开发框架.Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用.Sprin ...

  10. Spring 配置log4j和简单介绍Log4J的使用

    Log4j 是Apache的一个开放源代码项目,通过使用Log4j,我们可以控制日志信息输送的目的地是控制台.文件.GUI组件.甚至是套接口服务器.NT的事 件记录器.UNIX Syslog守护进程等 ...