问题1:如何从数据库中读取整个表数据到DataFrame中?

首先,来看很容易想到的的办法

     def read_table_by_name(self, table_name):
"""
读取table_name表
:return: dataframe对象 所有的评价对象及其数据
"""
field_list = [] # target表的所有字段的列表
field_data = [] # 存放某一字段的所有数据
frame_data = pd.DataFrame() self._cursor = self._connect.cursor()
sql = "select COLUMN_NAME from information_schema.COLUMNS where table_name = '%s'"
self._cursor.execute(sql % table_name)
results = self._cursor.fetchall()
for row in results:
field_list.append(row[0]) name_sql = "select %s from %s"
i = 0
for field in field_list:
self._cursor.execute(name_sql % (field, table_name))
column_data = self._cursor.fetchall()
field_data.clear()
for j in range(len(column_data)):
field_data.append(column_data[j][0])
frame_data.insert(i, field, field_data) # frame_data 插入数据 i += 1 return frame_data

看起来,十分麻烦。那么有没有简单的办法呢?当然有,目前我已知的有以下几种:

1:使用pandas.io.sql模块中sql.read_sql_table(table_name,conn)直接将一个table转到dataframe中

 import pandas as pd
from sqlalchemy import create_engine
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test')
result = pd.io.sql.read_sql_table('employee', engine)
print(type(result), '\n', result)

注意:read_sql_table 仅支持 SQLAlchemy 连接

输出结果如下:

2:使用pandas.io.sql模块中的sql.read_sql_query(sql_str,conn)或者sql.read_sql(sql_str,conn),效果相同,都使用sql语句

 import pandas as pd
import pymysql
from sqlalchemy import create_engine
# conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='123456', db='test')
engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test')
sql_str = 'select * from employee'
result = pd.io.sql.read_sql_query(sql_str, engine)
print(type(result), '\n', result)
 import pandas as pd
import pymysql
from sqlalchemy import create_engine
conn = pymysql.connect(host='127.0.0.1', port=3306, user='root', passwd='', db='test')
# engine = create_engine('mysql+pymysql://root:123456@localhost:3306/test')
sql_str = 'select * from employee'
result = pd.io.sql.read_sql_query(sql_str, conn)
print(type(result), '\n', result)

注意:read_sql_query 不仅支持 SQLAlchemy 连接,pymysql也可以

问题2:如何从数据库中读取表的指定列的数据到DataFrame中?

先来看比较容易想到的办法:

 def read_indexs_by_index(self, table_name,  index_list):
"""
根据选择的指标名列表读取table_name表
:param self:
:param table_name: 表名
:param index_list: 指定列的列表
:return:
"""
index_data = []
frame_data = pd.DataFrame()
sql = "select %s from %s"
i = 0
for index in index_list:
self._cursor.execute(sql % (index, table_name))
column_data = self._cursor.fetchall()
index_data.clear()
for j in range(len(column_data)):
index_data.append(float(column_data[j][0]))
frame_data.insert(i, index, index_data) # frame_data 插入数据
i += 1 return frame_data

再看使用使用 pd.io.sql.read_sql_query模块的方法:

 def read_indexs_by_index(self, table_name, index_list):
"""
根据选择的指标名列表读取table_name表
:param self:
:param table_name:
:param index_list:
:return:
"""
sql = "select * from %s"
df = pd.io.sql.read_sql_query((sql % table_name), self._connect) data_frame = df.loc[list(range(0, df.shape[0])), index_list] # df.loc[:,index_list]也可以 return data_frame

只需要四行

pandas 读mysql数据库(整个表或者表的指定列)的更多相关文章

  1. mysql数据库为什么要分表和分区?

    一般下载的源码都带了MySQL数据库的,做个真正意义上的网站没数据库肯定不行. 数据库主要存放用户信息(注册用户名密码,分组,等级等),配置信息(管理权限配置,模板配置等),内容链接(html ,图片 ...

  2. Hibernate连接mysql数据库并自动创建表

    天才第一步,雀氏纸尿裤,Hibernate第一步,连接数据库. Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建立映射关系,是一个 ...

  3. MYSQL数据库、用户、表等基础构建

    MYSQL数据库.用户.表等基础构建: 1.->:创建数据库: 1.1. create schema [数据库名称] default character set utf8 collate utf ...

  4. MySQL数据库性能优化:表、索引、SQL等

    一.MySQL 数据库性能优化之SQL优化 注:这篇文章是以 MySQL 为背景,很多内容同时适用于其他关系型数据库,需要有一些索引知识为基础 优化目标 减少 IO 次数IO永远是数据库最容易瓶颈的地 ...

  5. 关于php读mysql数据库时出现乱码的解决方法

    关于php读mysql数据库时出现乱码的解决方法 php读mysql时,有以下几个地方涉及到了字符集. 1.建立数据库表时指定数据库表的字符集.例如 create table tablename ( ...

  6. 使用jdbc将mysql数据库中的内容封装为指定对象的list集合

    使用jdbc将mysql数据库中的内容封装为指定对象的list集合 public List<User> findAll() { private JdbcTemplate template ...

  7. mysql数据库分区和分表

    转载自 https://www.cnblogs.com/miketwais/articles/mysql_partition.html https://blog.csdn.net/vbirdbest/ ...

  8. 检查mysql数据库是否存在坏表脚本

    #!/bin/bash #此脚本的主要用途是检测mysql服务器上所有的db或者单独db中的坏表 #变量说明 pass mysql账户口令 name mysql账号名称 data_path mysql ...

  9. MySql数据库中,判断表、表字段是否存在,不存在就新增

    本文是针对MySql数据库创建的SQL脚本,别搞错咯. 判断表是否存在,不存在就可新增 CREATE TABLE IF NOT EXISTS `mem_cardtype_resource` ( ... ...

随机推荐

  1. js的调用方式

    1.元素绑定 给具体的元素绑定JS的事件 事件:由用户行为触发的操作(鼠标操作,键盘操作) 语法:<标签 事件函数名="JS代码"> et: onclick:单机事件 ...

  2. Github&&SourceTree

    如何将本地的代码或者是文件上传到github 方法一:(github上面创建仓库,远程仓库克隆到本地,将文件拖拽到本地仓库) cd   文件夹 git clone 链接(github上面创建新仓库的链 ...

  3. GraphQL和C#

    GraphQL ---02 GraphQL和C#结合的实战项目   本文章是介绍和记录如何创建GraphQL项目,以及如何使用GraphQL进行数据的相关操作.项目参照GraphQL .Net 的官方 ...

  4. java-BigDecimal类

    1.BigDecimal类的概述和方法使用 * A:BigDecimal的概述 * 由于在运算的时候,float类型和double很容易丢失精度. * 所以,为了能精确的表示.计算浮点数,Java提供 ...

  5. 实验吧—安全杂项——WP之 你知道他是谁吗?

    点击链接就可以下载下来一个压缩包 解压后得到一个图片 在百度上可以搜出他是 托马斯·杰斐逊(英语:Thomas Jefferson) 我们将名字输入到flag内,但是不对 我下一步直接用软件NSE查看 ...

  6. 堆栈详解 + 彻底理解Java的值传递和引用传递

    本文旨在用最通俗的语言讲述最枯燥的基本知识 学过Java基础的人都知道:值传递和引用传递是初次接触Java时的一个难点,有时候记得了语法却记不得怎么实际运用,有时候会的了运用却解释不出原理,而且坊间讨 ...

  7. Two Sum II - Input array is sorted

    Given an array of integers that is already sorted in ascending order, find two numbers such that the ...

  8. LG1861 星之器

    题意 题目背景 Magic Land 上的时间又过了若干世纪„„ 现在, 人们谈论着一个传说:从前,他们的祖先来到了一个位于东方的岛屿, 那里简直就是另外一个世界.善于分析与构造的 Magic Lan ...

  9. BZOJ1494 [NOI2007]生成树计数

    题意 F.A.Qs Home Discuss ProblemSet Status Ranklist Contest 入门OJ ModifyUser  autoint Logout 捐赠本站 Probl ...

  10. day07 hadoop里面的RPC框架使用

    PS: RPC远程调用 Webservice啥的都是远程调用.下面简单介绍其使用过程 Hadoop已经实现了RPC框架,不用我们自己写,不过需要我们注意几点:1.发布服务端和客户端必须包名相同 1.服 ...