PostgreSQL里存储 pandas 数据帧时如何指定列的类型

2016/05/18 Python

最近在研究一个股票数据抓取的项目 tushare,返回的数据类型为 pandas 数据帧,希望把这些数据存储的 PostgreSQL,以便日后分析。

pandas 往数据库存储依赖于 sqlalchemy。 sqlalchemy有很强的推导能力,默认情况下也可以做的很好,但是有些时候往往不是尽如人意,例如在默认情况下会把所有的字符串存储为 TEXT 类型。对一个完美主义者来说,这是不可接受的,我们希望尽可能使用最适合的数据类型。

pandas 存储数据的时候,提供了一个网数据库里面存储的方法,to_sql ,可以存在 MySQL,PostgreSQL 等关系数据里。但是对如何制定数据类型说的并不清楚,只是说需要 SQLAlchemy 支持的类型,SQLAlchemy 的文档也没有讲的特别清楚,看来需要自己来探查了。

In [1]: import tushare as ts

In [2]: d = ts.get_hist_data('600848')

In [3]: d['code'] = '600848'

In [4]: from sqlalchemy.dialects.postgresql import *

In [5]: engine = create_engine('postgres://user:passwd@127.0.0.1/db_name?charset=utf8')

In [6]: from sqlalchemy import create_engine

In [7]: dtype = {
        'date': DATE,
        'code': CHAR(6)
}

In [8]: d.to_sql('testa', engine, dtype=dtype)

当我登录到数据库上去看,发现我所要改的字段类型已经改好。

偶然发现的一个小问题,写出来分享一下。

Search

    Table of Contents