PostgreSQL 里存储 pandas 数据帧时指定列的类型
最近在研究一个股票数据抓取的项目 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)
当我登录到数据库上去看,发现我所要改的字段类型已经改好。
偶然发现的一个小问题,写出来分享一下。