问题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. [LeetCode&Python] Problem 628. Maximum Product of Three Numbers

    Given an integer array, find three numbers whose product is maximum and output the maximum product. ...

  2. libnsq编译、使用记录

    官方介绍libnsq是nsq的c库,尼玛还真是c库,如果用g++编译还真编译不过.这篇文章就是说一下怎么在c++中使用libnsq. 为什么用g++编译不过libnsq呢,因为其头文件中默认全是c函数 ...

  3. numpy unable to find vcvarsall.bat

    出现这种情况,是需要引用vc的编译器,可以安装vs来解决,并且安装numpy前, 设置如下宏 SET VS100COMNTOOLS=%VS110COMNTOOLS% SET VS90COMNTOOLS ...

  4. ccf 201312-04 有趣的数(组合数学)

    问题描述 我们把一个数称为有趣的,当且仅当: 1. 它的数字只包含0, 1, 2, 3,且这四个数字都出现过至少一次. 2. 所有的0都出现在所有的1之前,而所有的2都出现在所有的3之前. 3. 最高 ...

  5. HDU 1754:I Hate It(线段树模板)

    I Hate It Time Limit: 9000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  6. 2017.4.5 OpenStack简介

    OpenStack 管理的资源不是单机的而是一个分布的系统,把分布的计算.存储.网络.设备.资源组织起来,形成一个完整的云计算系统:OpenStack 也提供一个 UI,这里包括一个图形化的 UI:H ...

  7. web四则混合运算3

    一.程序要求: 可以控制下列参数: 是否有乘除法: 是否有括号(最多可以支持十个数参与计算): 数值范围: 加减有无负数: 除法有无余数!   二.设计思路 要求能够通过参数来控制有无乘除法,加减有无 ...

  8. Python中元组、列表、字典的遍历和相互转化

    一.元组,列表,字典的遍历 1.1 元组的遍历 元组的遍历借助 range() 函数,基本思想是通过元组的长度使用for循环进行遍历,代码如下:     fruits=("apple&quo ...

  9. LG4238 【【模板】多项式求逆】

    前言 学习了Great_Influence的递推实现,我给大家说一下多项式求逆严格的边界条件,因为我发现改动一些很小的边界条件都会使程序出错.怎么办,背代码吗?背代码是不可能,这辈子都不会背代码的.理 ...

  10. mysql之mysqldump——备份与还原

    导出数据库里的某一张表 [root@localhost ~]# mysqldump -uroot -p test bptest>fi.mysql #导出test数据库中的bptest表 Ente ...