Python的Pandas包提供了to_sql 方法使存储的过程更为便捷,to_sql会默认为你创建一个表,这时表的类型可能并不是你期望的。
而pg又是有点特别,因为里面的数组类型很友好。这时候我们需要事先定义数据 类型,
即定义:
dtypedict = {'c': ARRAY(Integer)}
import pandas as pd
from sqlalchemy import create_engine
from sqlalchemy.dialects.postgresql import ARRAY
from sqlalchemy.types import NVARCHAR, Float, Integer
l = [[1,2,3],[4,5,6]]
gp_engine = create_engine('postgresql+psycopg2://000000:000000@000000/000000')
# list to array
d ={'c':l}
df = pd.DataFrame(d)
dtypedict = {
'c': ARRAY(Integer)
}
df.to_sql('000000', con=engine, if_exists='replace', index=False, chunksize=100,dtype=dtypedict)
里面还用到一个小技巧: 把 二维的list 转化成 dataframe 的一列,而不两列。
解决方法:
先 把 二维的 list 变成 dict ,d ={'c':l} , 再 df = pd.DataFrame(d)
如图