如何使用 Python API 附加到内存中的 DolphinDB 数据库 table?

How to append to a DolphinDB database in-memory table with Python API?

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

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

有谁知道我做错了什么吗?

由于Pythonpandas中所有与时间相关的数据类型都是datetime64,上传一个DataFrame到DolphinDB后,所有时间类型的列都是nanotimestamp类型,所以在追加一个带有时间列的DataFrame时,我们需要在DolphinDB服务器上查看时间Column数据类型转换:先将DataFrame上传到服务器,select通过select语句将table中的每一列,进行时间类型转换(本例将nanotimestamp类型转换为date类型),然后追加到内存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))")