Python3中pandas.DataFrame.to_sql指定数据库表的列类型(dtype)和存取数据时遇到的坑

工具:Pycharm
Python版本:3.6
数据库:postgresql

问题:
Python中生成的Dataframe通过df.to_sql导入数据库,在数据库中直接新建的表的数据类型与sql语言中的数据类型不符,想要更改。

DataFrame.to_sql 官方文档:
http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html


df.to_sql('数据库表名 ', con=engine, index=False, if_exists='append')

在postgresql里面得到的结果如下:
在这里插入图片描述
坑来了:
用Python查询的时候,总是报错:关系不存在
Python3中pandas.DataFrame.to_sql指定数据库表的列类型(dtype)和存取数据时遇到的坑_第1张图片
在网上查了半天,看到了这个经验帖:
https://www.jianshu.com/p/4c5e1ebe8470?utm_source=oschina-app

我就以为是因为数据类型的问题,所以就开始用dtype参数改数据类型:
在这里插入图片描述


from sqlalchemy.types import VARCHAR, Float, Integer, Date, Numeric


dtypedict = {'trade_date': Date,  'ts_code': VARCHAR}
df.to_sql('数据库表名', con=engine, index=False, if_exists='append', dtype=dtypedict)

改好之后,如下:
在这里插入图片描述
但是,读取数据的时候仍然报上面的错误:关系不存在…
内心崩溃…
突然想到是不是储存的时候,参数没有填对,然后神奇的事情发生了:


df.to_sql(name='数据库表名', con=engine, index=False, if_exists='append', dtype=dtypedict)

加了 name= 之后,就可以用python查询了,后来试了一下,加完name=,不用改数据类型也可以查询,嗯…就是这个name的问题。

你可能感兴趣的:(Python3中pandas.DataFrame.to_sql指定数据库表的列类型(dtype)和存取数据时遇到的坑)