-
DolphinDB与Python
DolphinDB可以在Python中调用,大大降低了时序数据库的使用门槛。
DolphinDB Python API实质是封装了DolphinDB的脚本语言1(也就是前面11次案例中使用到的语言)。Python代码被转换成DolphinDB脚本在DolphinDB服务器执行,执行结果保存到DolphinDB服务器或者序列化到Python客户端。
-
Python API中方法分为两类
-
不触发脚本的执行
只是将Python语言转换成DolphinDB脚本,但并不在DolphinDB服务器上执行。
-
触发脚本的执行
即将Python语言转成DolphinDB脚本语言,又在DolphinDB服务器上运行。
触发脚本执行的方法,都是table类的方法。如下:
方法名 详情 connect(host, port, [username, password]) 将会话连接到DolphinDB服务器。 toDF() 把DolphinDB表对象转换成pandas的Dataframe对象。 executeAs(tableName) 执行结果保存为指定表名的内存表。 execute() 执行脚本。与 update和delete一起使用。database(dbPath, …) 创建或加载数据库。 dropDatabase(dbPath) 删除数据库。 dropPartition(dbPath, partitionPaths) 删除数据库的某个分区。 dropTable(dbPath, tableName) 删除数据库中的表。 drop(colNameList) 删除表中的某列。 ols(Y, X, intercept) 计算普通最小二乘回归,返回结果是一个字典。 -
安装Python API模块
pip install dolphindb # 如果已安装,可以更新,因为当前他们开发迭代较快 pip install dolphindb --upgrade # 当前版本为0.1.13.8 -
连接DolphinDB数据库
-
会话session
Python通过会话与DolphinDB进行交互,就像MySQL与Python的engine一样。
建立会话之前,需要把目标服务器先打开,即服务器的端口呈开放状态。
# 创建会话,建立连接 s = ddb.session() s.connect("localhost", 8920) # # 如需用户名和密码 # s.connect("localhost", 8848, admin, 123456)如果连接成功,运行后不会返回信息。想来是遵循无消息就是最好的消息原则。

如果,连接失败,会返回错误码。

如果采用单节点部署,默认端口8848;如果采用单服务器集群部署,默认端口8920.
-
重新连接
在API使用期间,如果与服务器连接暂时中断,API会进行重新连接,并执行之前未成功运行的脚本。
重新连接会获得一个新的会话,在新会话执行之前连接未成功运行的脚本B之前,可以通过下述代码设置一个任务A,先执行完A再执行未成功运行的B。
import dolphindb as ddb s = ddb.session() s.setInitScript("initTable = streamTable(10000:0, `id`val, [INT,LONG])") currentInitScript = s.getInitScript() -
将数据导入DolphinDB服务器
DolphinDB数据库根据存储方式可以分成3种类型:
- 内存数据库
- 本地文件系统数据库
- 分布式文件系统(DFS)的数据库
关于三种类型的基本概念,参见《内存数据库、磁盘数据库、分布式数据库区别》《数据库分区、分表、分库、分片》。
本文先以本地文件系统的数据库为例。
-
把数据存入内存表
此处使用
example.csv数据,此数据官网有提供,不过下载网速较慢,各位老板如有需要,可以留言,我发给各位。 -
loadText载入到内存表
loadText方法把文本文件载入到DolphinDB的内存表种,并返回一个DolphinDB内存表对象。
>> trade = s.loadText('D:/DolphinDB/Python/example.csv') # Windows中路径需要用反斜杠,与常规Python应用不同 >> print(trade) >> print(type(trade)) <dolphindb.table.Table object at 0x000001CED8779BA8> <class 'dolphindb.table.Table'>当然,这里也可以使用ploadText,速度会翻倍。
对比载入一个840M股票数据csv文件:
方式 时间 pd.read_csv 01:02.877 loadText 00:33.288 ploadText 00:16.969 -
toDF
toDF方法把Python中的DolphinDB对象转换成pandas DataFrame对象。
>> df = trade.toDF() >> print(df) >> print(type(df)) TICKER date VOL PRC BID ASK 0 AMZN 1997-05-15 6029815 23.50000 23.50000 23.6250 1 AMZN 1997-05-16 1232226 20.75000 20.50000 21.0000 2 AMZN 1997-05-19 512070 20.50000 20.50000 20.6250 ... 13133 NFLX 2016-12-28 4388956 125.89000 125.88000 125.8900 13134 NFLX 2016-12-29 3444729 125.33000 125.31000 125.3300 13135 NFLX 2016-12-30 4455012 123.80000 123.80000 123.8300 [13136 rows x 6 columns] <class 'pandas.core.frame.DataFrame'> -
把数据导入到分区数据库
如果数据文件比可用内存大,可以把数据导入到分区数据库中。
-
创建分区数据库
分区方案:值分区;
分区字段:example.csv文件中有3只股票,使用股票代码作为分区字段。
s.database('db', partitionType= 'VALUE', partitions=["AMZN", "NFLX", "NVDA"], dbPath='D:/DolphinDB/Python/valuedb1') # 等同于下面这种分区方案设定方法 s.database('db', partitionType= ddb.settings.VALUE, partitions=["AMZN", "NFLX", "NVDA"], dbPath='D:/DolphinDB/Python/valuedb1')要点:文件路径要用/,否则数据库创建不成功,但是并不会报错
-
创建分布式分区数据库
s.database('db', partitionType='VALUE', partitions=["AMZN","NFLX", "NVDA"], dbPath="dfs://valuedbdfs")与分区数据库相比,只是存储路径
dbPath不同,这里valuedbdfs在数据节点文件夹下面。
-
其他分区方式
除了值分区(VALUE),DolphinDB还支持顺序分区(SEQ)、哈希分区(HASH)、范围分区(RANGE)、列表分区(LIST)与组合分区(COMBO)。
概念及区别详情参见《DolphinDB使用案例2:数据表分区》
-
创建分区表,并追加数据
创建数据库后,可使用函数
loadTextEx把文本文件导入到分区数据库的分区表中。如果分区表不存在,函数会自动生成该分区表,并把数据追加到表中;
如果分区表已存在,则直接把数据追加到分区表中。
loadTextEx函数返回一个包含载入元素的DolphinDB表对象。可通过toDF()函数转成pandas.DataFrame,前文有讲。# 创建分区数据库 s.database('db', partitionType= ddb.settings.VALUE, partitions=["AMZN", "NFLX", "NVDA"], dbPath='D:/DolphinDB/Python/valuedb') # 创建分区表,并载入数据 trade = s.loadTextEx('db', tableName= 'trade', partitionColumns= ['TICKER'], filePath= 'D:/DolphinDB/Python/example.csv') # 查看表行数 print(trade.rows) # 查看表列数 print(trade.cols) # 查看表结构 print(trade.schema) # 查看数据库中已经存在的表 table = s.table(dbPath='D:/DolphinDB/Python/valuedb', data= "trade")上面这段代码,每运行一次,就会发现行数(trade.rows)增多,因为如果表在分布式数据库中存在,就会把数据追加到表上。
要解决这个问题,存在两个方案:
-
数据库去重
可以先判断是否存在重名数据库,如果存在就删除,重新创建。
if s.existsDatabase(WORK_DIR+"/valuedb"): s.dropDatabase(WORK_DIR+"/valuedb")这种方式在数据库不重要的时候没问题,如果数据库是需要长期存在的,这样就太粗鲁了。
-
设置避免重复插入相同数据
创建含主键的流数据表。keyedStreamTable函数。
需要理清逻辑关系,keyedStreamTable函数是直接创建一个包含主键的表,并不能给一个已经创建好的普通表指定主键。
这就要求使用者在使用之处就做好使用规划。
-
-
把数据导入到内存的分区表中
-
loadTextEx
先有数据库,再有表,这个逻辑是不变的。
# 第一步:创建值分区内存数据库 s.database('db', partitionType= ddb.settings.VALUE, partitions=['AMZN', 'NFLX', 'NVDA'], dbPath='') # 第二步:讲数据导入内存的分区表中 trade = s.loadTextEx
相关推荐
Shioaji与DolphindB集成的实践指南
Shioaji的核心功能包括行情获取、数据解析、策略回测、自动交易等。其内置的回测引擎,可以让用户在没有连接真实交易所的情况下,对策略进行模拟测试。同时,Shioaji支持多种语言的绑定,如Python、C++等,方便不同背景的开发者使用。除此之外,工具还提供了丰富的数据接口,涵盖了交易所需的各种数据类型,如行情、成交、K线等。Jupyter Notebook是一种开源的Web应用程序,它允许用户创建和共享包含实时代码、方程、可视化和文本的文档。
X光安检模型训练第一步:手把手教你处理OPIXray和HIXray这两个小众数据集
本文详细解析了X光安检AI模型训练的关键步骤,重点介绍如何处理OPIXray和HIXray这两个专业数据集。从数据格式转换到YOLO标准,再到数据增强和质量验证,手把手指导开发者高效利用这些数据集进行目标检测模型训练,提升安检场景下的危险物品识别准确率。
手把手教你用Simulink搭建交流异步电机矢量控制模型(附完整仿真文件)
本文详细介绍了如何使用Simulink搭建交流异步电机矢量控制模型,涵盖系统架构设计、关键模块实现、PI调节器参数整定及仿真分析等核心内容。通过实战指南和完整仿真文件,帮助读者掌握矢量控制技术,提升电机控制系统的设计与调试能力。
Python实战:超分辨率图像质量评估全攻略——PSNR、SSIM、LPIPS与NIQE的代码实现与优化
本文详细介绍了在Python中实现超分辨率图像质量评估的完整方案,涵盖PSNR、SSIM、LPIPS和NIQE四大核心指标。通过模块化代码设计、多进程并行处理和GPU加速优化,帮助开发者构建高效、可扩展的评估系统,并提供了实战避坑指南与结果解读方法。
基于Python的军事装备数据爬取与分析:从网页抓取到数据可视化实战
本文将详细介绍如何使用Python最新技术栈构建一个完整的军事装备数据爬虫系统。我们将从爬虫基础讲起,逐步深入到异步爬取、反反爬策略、数据存储与分析等高级主题,最终实现一个能够自动抓取、清洗、存储和分析军事装备数据的完整解决方案。文章包含大量实战代码示例,涉及requests-html、aiohttp、Playwright等现代爬虫库,以及MongoDB存储、Pandas分析和Pyecharts可视化等技术。关键词:Python爬虫、军事数据、异步爬取、反反爬、数据可视化。
pycharm一直选择不了conda正确路径弹框报错:latinit property envs_dirs has not been initialized...如何解决?
🏆本文收录于 《全栈 Bug 调优(实战版)》 专栏。专栏聚焦真实项目中的各类疑难 Bug,从成因剖析 → 排查路径 → 解决方案 → 预防优化全链路拆解,形成一套可复用、可沉淀的实战知识体系。无论你是初入职场的开发者,还是负责复杂项目的资深工程师,都可以在这里构建一套属于自己的「问题诊断与性能调优」方法论,助你稳步进阶、放大技术价值 。
【路径规划】Theta_star算法机器人栅格地图最短路径规划【含Matlab源码 2618期】
Theta_star算法机器人栅格地图最短路径规划 完整的代码,方可运行;可提供运行操作视频!适合小白!
【GlobalMapper精品教程】074:从Lidar点云创建3D地形模型
本文基于地形点云数据,基于泊松方法、贪婪三角形测量方法和阿尔法形状创建3d地形模型。
CRC_16---ModBus 计算方法及代码实现
1、 CRC寄存器初始值为 0xFFFF;即16个字节全为1; 2、 CRC-16 / ModBus的多项式0xA001H (1010 0000 0000 0001B) ; ‘H’表示16进制数,‘B’表示二进制数。 计算步骤为: (1).预置 16 位寄存器为十六进制 0xFFFF(即全为 1) ,称此寄存器为 CRC 寄存器; (2).把第一个 8 位数据与 16 位 CRC 寄存器的低位相异或,把结果放于 CRC 寄存器; (3).检测相异或后的CRC寄存器的最低位,若最低位为1,CRC寄存器
计算机控制技术及应用
《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。
Outlook Express 6 (OE6) for Win7/Win8/Win10
英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。
汉书HE8,好用的汇编代码编写工具
汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大
1214



被折叠的 条评论
为什么被折叠?



