问题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. quartz定时任务及时间设置

    quartz 定时任务时间设置1.这些星号由左到右按顺序代表 :     *    *     *     *    *     *   *                               ...

  2. search的 制作

    <meta charset="utf-8">  <title>search的制作</title> <style type="te ...

  3. Justified Jungle

    Problem J: Justified Jungle Time limit: 6 s Memory l imit: 512 MiB As you probably know, a tree is a ...

  4. POJ2689 Prime Distance(数论:素数筛选模板)

    题目链接:传送门 题目: Prime Distance Time Limit: 1000MS Memory Limit: 65536K Total Submissions: Accepted: Des ...

  5. 2017-2018-1 20155208 课堂测试(ch06)(补做)

    2017-2018-1 20155208 课堂测试(ch06)(补做) 1.( 多选题 | 1 分) 下面说法正确的是(ABC) A . 存储层次结构中最小的缓存是寄存器 B . 存储层次结构的中心思 ...

  6. rest-framework之分页器

    rest-framework之分页器 本文目录 一 简单分页(查看第n页,每页显示n条) 二 偏移分页(在第n个位置,向后查看n条数据) 三 CursorPagination(加密分页,只能看上一页和 ...

  7. vue全家桶+Koa2开发笔记(3)--mongodb

    1. 安装 momgodb brew install mongodb安装成功后执行 which mongod启动:mongod 2. 下载可视化操作数据库的软件 https://robomongo.o ...

  8. Java打印九九乘法表及倒打九九乘法表

    //正打 public class Test3 { public static void main(String[] args) { for(int j=1;j<10;j++){ for(int ...

  9. AspNet Core Api Restful +Swagger 发布IIS

    上一步我们创建好CoreApi 接下来在框架中加入 Swagger  并发布  到 IIS (1)首先点击依赖项>管理Nuget包 (2)输入 Swashbuckle.aspnetCore  比 ...

  10. Oracle sqlnet.ora配置

    Oracle sqlnet.ora配置 sqlnet.ora的作用(官网指出的)   www.2cto.com 1.限制客户端访问(如指定客户端域为不允许访问) 2.指定命名方法(local nami ...