【问题标题】:How to append to a DolphinDB database in-memory table with Python API?如何使用 Python API 追加到 DolphinDB 数据库内存表?
【发布时间】:2020-02-26 21:11:41
【问题描述】:

我在 python 中运行以下代码以追加到 DolphinDB 数据库内存表:

import dolphindb as ddb
import pandas as pd
import numpy as np
s = ddb.session()
s.connect("localhost", 8848, "admin", "123456")
script = """t = table(1:0,`id`date`ticker`price, [INT,DATE,STRING,DOUBLE])
share t as tglobal"""
s.run(script)

tb=pd.DataFrame({'id': [1, 2, 2, 3],
                 'date': np.array(['2019-10-30', '2019-10-30', '2019-10-30', '2019-10-30'], dtype='datetime64[D]'),
                 'ticker': ['AAPL', 'AMZN', 'FB', 'GOOG'],
                 'price': [243.26, 1779.99, 188.25, 1261.29]})
s.run("append!{tglobal}",tb)

但是,我遇到了一个错误:

pandas._libs.tslibs.np_datetime.OutOfBoundsDatetime: Out of bounds nanosecond timestamp: -1817286-04-17 00:00:00

有谁知道我做错了什么?

【问题讨论】:

    标签: python dolphindb


    【解决方案1】:

    由于 Python pandas 中与时间相关的所有数据类型都是 datetime64,所以在将 DataFrame 上传到 DolphinDB 后,所有时间类型的列都是 nanotimestamp 类型的,所以在附加带有时间列的 DataFrame 时,我们需要检查 DolphinDB 上的时间服务器列数据类型转换:先将DataFrame上传到服务器,通过select语句选择表中的每一列,进行时间类型转换(本例将nanotimestamp类型转换为日期类型),然后追加到内存中table 中,如下:

    tb=pd.DataFrame({'id': [1, 2, 2, 3],
                     'date': np.array(['2019-10-30', '2019-10-30', '2019-10-30', '2019-10-30'], dtype='datetime64[D]'),
                     'ticker': ['AAPL', 'AMZN', 'FB', 'GOOG'],
                     'price': [243.26, 1779.99, 188.25, 1261.29]})
    s.upload({'tb':tb})
    s.run("tableInsert(tglobal,(select id, date(date) as date, ticker, price from tb))")
    

    【讨论】:

      猜你喜欢
      • 2021-09-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-09-09
      • 1970-01-01
      • 2020-06-11
      • 2020-06-12
      • 2020-06-07
      相关资源
      最近更新 更多