使用pandas.to_sql()时如何定义数据类型

4

我正在使用 pandas.to_sql() 方法将 pandas Dataframe 写入到 redshift 数据库中:

from sqlalchemy import create_engine
import pandas as pd

conn = create_engine('postgresql://user:password@redshift-url.amazonaws.com:5439/db')

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

这个数据框中有一个名为timestamp的列,格式是2020-03-02,但是当我写入数据库时,它以varchar的形式存储,因此无法将该列用于需要时间戳格式的图表绘制。

在使用pandas.to_sql()写入数据时,是否有一种方法可以定义列类型?我不想创建视图或从正在写入的表中创建另一个表,因为那样我就需要删除当前表格,因为另一个表格将与原始表格相关联,我会收到错误信息“无法删除表格,因为其他对象依赖于它”。


1
你可以使用 sqlalchemy.types 并将模式字典指定为 dtype 传递给 pd.to_sql 函数,参见此链接中的被接受的答案 - pandas to_sql all columns as nvarchar。请在此处查看支持的 sqlalchemy 类型 - https://github.com/zzzeek/sqlalchemy/blob/master/lib/sqlalchemy/types.py。 - tidakdiinginkan
1个回答

5

使用sqlalchemy.types来处理时间戳列:

您可以使用sqlalchemy.types模块来处理时间戳列:

from sqlalchemy import types 

sql_types =  {'date' : types.TIMESTAMP(0)}

那么将您的dataframe.to_sql调用更改为包含以下参数。

dataframe.to_sql('table_name', conn, index=False, 
                if_exists='replace', schema='schema_name',
                dtype=sql_types)

嗯,由于某些原因,数据类型仍然是varchar。 - Jonas Palačionis
@JonasPalačionis,你能打开表格查看创建的数据类型吗? - Umar.H

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接