首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用sqlalchemy将带有datetime.timedelta类型数据对象的熊猫数据存储到postgresql /b中?

如何使用sqlalchemy将带有datetime.timedelta类型数据对象的熊猫数据存储到postgresql /b中?
EN

Stack Overflow用户
提问于 2019-04-04 12:46:49
回答 1查看 1.6K关注 0票数 3

我希望使用sqlalchemy将包含timedelta64类型列的熊猫数据存储在Postgresql数据库中。阅读文档(basics.html),我希望python 'timedelta‘数据类型可以映射到postgresql 'interval’数据类型上,但我不知道如何做到这一点。我尝试了以下代码:

代码语言:javascript
复制
import sqlalchemy as sa
import pandas as pd
from datetime import timedelta

engine = sa.create_engine('postgresql+psycopg2://postgres:password@floris/floris')

my_df = pd.DataFrame(data=[ timedelta(days=1), timedelta(days=2), timedelta(days=3)], index=range(0,3), columns=['delay'])

my_df.to_sql('my_table', con=engine, dtype={'delay': sa.types.Interval})

我得到了以下错误:

代码语言:javascript
复制
psycopg2.ProgrammingError: column "delay" is of type interval but expression is of type bigint
LINE 1: INSERT INTO my_table (index, delay) VALUES (0, 8640000000000...
                                                       ^
HINT:  You will need to rewrite or cast the expression.

看起来sqlalchemy没有保留timedelta数据类型,而是将其转换为bigint。如何解决这个问题?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-04-05 13:40:39

Timedelta被转换为整数值。请参阅https://github.com/pandas-dev/pandas/blob/master/pandas/io/sql.py#L880-L883

解决方法是在将时间增量保存到db之前,以字符串格式转换时间增量。

代码语言:javascript
复制
def a_func(val):
    return str(val)

my_df['delay'] = my_df['delay'].apply(a_func)

代码语言:javascript
复制
my_df['delay'] = my_df['delay'].astype(str)
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55516374

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档