如何在 python 中定义正在写入 AWS Redshift Postgres DB 的数据的列类型

Posted

技术标签:

【中文标题】如何在 python 中定义正在写入 AWS Redshift Postgres DB 的数据的列类型【英文标题】:How to define column type of data that is being written to a AWS Redshift Postgres DB in python 【发布时间】:2020-03-13 09:09:01 【问题描述】:

我有一个看起来像这样的熊猫数据框:

A       B                       C         D
80.00   2020-03-07 19:36:50     testing   approved
80.00   2020-03-07 19:46:50     testing   approved

我已经成功地将这个 pandas 数据框写入数据库,如下所示:

conn = create_engine('postgresql://username:password@redshift-blablabla.eu-west-1.redshift.amazonaws.com:5439/database_name')

dataframe.to_sql('table_name', conn,index=False, if_exists='replace')

当我尝试将此表用作在 Superset 中可视化数据的源时,我注意到所有内容都存储为 varchar,我不能使用列 B 作为日期戳来序列化数据。

写入数据库时​​如何定义列类型?并且日期戳是否应该只有日期而没有小时才能作为日期戳有效?

感谢您的帮助。

【问题讨论】:

【参考方案1】:

to_sql 有一个参数dtype,您可以通过该参数将单个列的数据类型作为字典提供,或者同时将所有列的数据类型作为标量提供。你试过了吗?

dtype : 字典或标量,可选

指定列的数据类型。如果使用字典,键应该是列名,值应该是 SQLAlchemy 类型或 sqlite3 旧模式的字符串。如果提供了标量,它将应用于所有列。

【讨论】:

以上是关于如何在 python 中定义正在写入 AWS Redshift Postgres DB 的数据的列类型的主要内容,如果未能解决你的问题,请参考以下文章

使用 python 写入 aws lambda 中的 /tmp 目录

如何在 AWS Datapipeline 中的 Python 脚本中提供 Redshift 数据库密码?

我如何使用 aws lambda 将文件写入 s3 (python)?

AWS:从 Pandas 数据帧写入 DynamoDB

如何在 AWS Lambda 中使用 Python 自定义包

如何强制Python XlsxWriter以自定义格式写入单元格