Back to skills
SKILL.md
Dolphindb Tushare Import
ASecurity将 Tushare Pro API 数据导入 DolphinDB,支持 stock/index/fund/bond/futures/options/etf/spot/fx/llm 多数据域导入。
- 8 stars
- 0 votes
- 0 copies
- 1 view
- Added September 6, 2026
Works with
Security analysis
100/100Pro scans all 20 files and shows the line behind each finding
npx -y skills add dolphindb/DolphinX_Skill --skill dolphindb-tushare-import --agent claude-codeAre you the author of Dolphindb Tushare Import?
Add the live security badge to your README. It updates with every re-scan.
[](https://www.skillsdirectory.com/skills/dolphindb-dolphindb-tushare-import)---
name: dolphindb-tushare-import
description: 将 Tushare Pro API 数据导入 DolphinDB,支持 stock/index/fund/bond/futures/options/etf/spot/fx/llm 多数据域导入。
---
# Tushare 数据导入 - DolphinX 版
将 Tushare Pro API 数据自动导入 DolphinDB 分布式数据库。本 skill 在 DolphinDB Web 平台中运行,全程使用 `.dos` 脚本。
## 执行要求
1. 加载本文件后,立即从步骤 1 开始执行,且必须按照指定流程执行。
2. 除非缺少必要参数或用户需要确认导入范围,不要额外中断流程。
3. 如果按流程执行报错,直接返回即可,不要做额外尝试。
4. 所有需要在服务端执行的内容均通过 DolphinDB Web 平台完成。
## 执行步骤
### 1. 收集导入参数
向用户确认或收集以下参数:
| 参数 | 是否必填 | 说明 |
| --- | --- | --- |
| `token` | 是 | Tushare Pro API token |
| `dataDomains` | 是 | 一个或多个数据域,例如 `["stock", "index"]` |
| `startDate` | 是 | 起始日期,转换为 DolphinDB `DATE`,例如 `2026.01.01` |
| `endDate` | 是 | 结束日期,转换为 DolphinDB `DATE`,例如 `2026.01.02` |
| `tableNamesByDomain` | 否 | 按数据域指定表名映射;空映射表示每个数据域导入全部表 |
若用户已在请求中提供所有必要参数,可直接使用,不要重复询问。若缺少必要参数,只询问缺失项。
### 2. 环境检查与模块准备
使用步骤 1 收集到的 `dataDomains` 调用 `dolphindb-tushare-check-env` skill,完成:
1. `httpClient` 插件检查和加载。
2. 只检查并上传本次导入需要的模块:`easy_tushare::ts_init`,以及每个数据域对应的 `*_init`、`*_create_table`、`*_load_data`、`*_schedulejob` 4 个模块。
3. `py` 插件检查;仅在用户需要依赖 `py` 插件的接口时必须安装。
判断逻辑:
- `dolphindb-tushare-check-env` 成功:继续步骤 3。
- `dolphindb-tushare-check-env` 失败:终止流程,并向用户展示 `dolphindb-tushare-check-env` 输出的错误信息。
### 3. 展示参数确认
执行前向用户展示:
```text
请确认以下 Tushare 导入参数:
- 数据域:{dataDomains}
- 日期范围:{startDate} ~ {endDate}
- 表名映射:{tableNamesByDomain 或 全部}
确认后将在 DolphinDB Web 平台执行导入脚本。
```
提供选项:
- 使用以上参数继续执行。
- 修改表名或日期范围。
- 取消。
### 4. 修改并执行导入脚本
根据确认参数修改:
```text
scripts/import_data.dos
```
需要改动的用户参数区:
```dos
token = "YOUR_TUSHARE_TOKEN"
dataDomains = ["stock"]
startDate = 2026.01.01
endDate = 2026.01.02
tableNamesByDomain = dict(STRING, ANY)
```
多数据域指定表名示例:
```dos
dataDomains = ["stock", "index"]
tableNamesByDomain = dict(STRING, ANY)
tableNamesByDomain["stock"] = ["stock_basic", "daily"]
tableNamesByDomain["index"] = ["index_basic", "index_daily"]
```
执行整个 `scripts/import_data.dos`。脚本会:
1. 加载 `easy_tushare::ts_init` 和所选数据域的 init 模块,不加载未选择资产域的模块。
2. 调用 `create_db()` 初始化默认数据库。
3. 根据每个数据域调用对应的 `*_init_tables` 初始化库表,并调用 `*_history_data_load` 导入历史数据。
4. 输出 `[TUSHARE-IMPORT] STATUS=SUBMITTED` 标记。
### 5. 进度查询
当用户追问任务进度时,在 DolphinDB Web 平台执行查询,并以业务可读方式总结,不要直接贴原始表格。
可用查询思路:假设 `table_names` 为根据本次用户参数得到的所有需要导入的表名字符串向量,执行:
```dos
jobs = getRecentJobs()
select * from jobs where split(jobDesc, "_")[1] in table_names order by startTime desc
```
根据用户参数进一步核验目标表,例如:
```dos
select count(*) from loadTable("dfs://tushare_basic_db", "stock_basic")
```
返回时按以下风格说明:
- 运行中:说明已启动的任务数量、完成数量、仍在运行的任务。
- 已完成:说明目标库表和行数。
- 报错:用通俗语言解释错误,并指出排查方向,例如 token 权限、API 频控、网络访问、表不存在或日期范围无数据。
### 6. 数据导入定时任务设置
当用户请求提交增量数据定时导入任务时,先判断当前上下文是否已经明确满足以下前置条件:
1. 用户已提供 `token`、`dataDomains` 和可选的 `tableNamesByDomain`。
2. 本次数据域和表名对应的库表已经初始化。
3. 如果用户需要历史数据,历史批量导入任务已经完成。
必须遵循以下分支处理:
- 如果当前上下文已经明确完成步骤 4 的历史导入脚本执行,并且步骤 5 或用户反馈已确认相关任务完成,可以继续提交增量定时任务。
- 如果当前上下文明确显示尚未初始化库表,或用户明确说“没有初始化库表 / 没有导入历史数据”,不要直接提交定时任务。先提示用户定时任务依赖目标库表,并建议先执行步骤 4 完成库表初始化和历史导入。
- 如果当前上下文无法判断库表是否初始化、历史导入是否完成、是否存在运行中的同范围历史导入任务,**不要做额外尝试**。不要主动执行 `import_data.dos`,不要主动执行库表初始化,不要主动查询表结构或任务状态,不要重新运行环境检查;只向用户做显式确认。
上下文不明确时,向用户展示以下确认文案,并等待用户回复后再继续:
```text
当前请求是提交 Tushare 增量数据定时任务。
我无法从当前上下文确认以下前置条件是否已经满足:
- 目标数据域和表名对应的库表已经初始化。
- 如需历史数据,历史批量导入任务已经完成。
- 当前没有同一批数据域和表名的历史导入任务仍在运行。
请确认是否继续提交增量定时任务:
1. 已确认库表已初始化,且历史导入已完成或不需要历史导入,继续提交定时任务。
2. 暂不提交定时任务,先执行历史导入流程完成库表初始化和历史数据导入。
说明:Tushare 数据接口有访问频次限制。如果历史批量导入任务和增量定时任务同时运行,可能导致接口限频、任务失败或部分表未更新;如果库表尚未初始化,定时任务可能因目标表不存在而失败。
```
用户回复后的处理规则:
- 用户选择继续提交:开始提交增量数据定时任务。
- 用户选择先执行历史导入:回到步骤 1 到步骤 4,先完成参数收集、环境检查、参数确认和历史导入脚本执行。
- 用户回复不明确:继续要求用户确认,不要执行任何脚本。
提交定时任务时,无需再次检查环境,直接使用步骤 3 已确认的任务参数;如果用户是直接请求设置定时任务且没有经过步骤 3,则仅收集 `token`、`dataDomains` 和可选的 `tableNamesByDomain`,不要收集历史导入日期范围。
```text
scripts/schedule_data.dos
```
需要改动的用户参数区:
```dos
token = "YOUR_TUSHARE_TOKEN"
dataDomains = ["stock"]
tableNamesByDomain = dict(STRING, ANY)
```
多数据域指定表名示例:
```dos
dataDomains = ["stock", "index"]
tableNamesByDomain = dict(STRING, ANY)
tableNamesByDomain["stock"] = ["stock_basic", "daily"]
tableNamesByDomain["index"] = ["index_basic", "index_daily"]
```
执行整个 `scripts/schedule_data.dos`。脚本会:
1. 根据 `dataDomains` 动态加载对应的 `easy_tushare::*_schedulejob` 模块。
2. 对每个数据域调用 `scheduleJob_*_data_daily(token, tableNames)`。
3. 输出 `[TUSHARE-SCHEDULE] STATUS=SCHEDULED` 标记。
各资产域已有模块中的定时任务时间由对应 `*_schedulejob.dos` 内部决定,例如多数资产域为每日 `20:00`,`stock` 为每日 `21:00`。若用户需要修改定时执行时间,需要先修改对应资产域的 `*_schedulejob.dos` 模块实现,再重新上传模块。
提交后可在 DolphinDB Web 平台中执行以下查询确认定时任务:
```dos
getScheduledJobs()
```
返回时按以下风格说明:
- 已提交:说明数据域、表名范围和定时任务名称。
- 已存在/重复:提示用户检查是否已有同名定时任务,避免重复提交。
- 报错:用通俗语言解释错误,并指出排查方向,例如模块未上传、token 未填写、表名不存在、权限不足或任务名冲突。
## 数据域和函数映射
| 数据域 | 初始化函数 | 历史导入函数 | 增量数据导入函数 |
| --- | --- | --- | --- |
| `stock` | `stock_init_tables` | `stock_history_data_load` | `scheduleJob_stock_data_daily` |
| `index` | `index_init_tables` | `index_history_data_load` | `scheduleJob_index_data_daily` |
| `fund` | `fund_init_tables` | `fund_history_data_load` | `scheduleJob_fund_data_daily` |
| `bond` | `bond_init_tables` | `bond_history_data_load` | `scheduleJob_bond_data_daily` |
| `futures` | `futures_init_tables` | `futures_history_data_load` | `scheduleJob_futures_data_daily` |
| `options` | `options_init_tables` | `options_history_data_load` | `scheduleJob_options_data_daily` |
| `etf` | `etf_init_tables` | `etf_history_data_load` | `scheduleJob_etf_data_daily` |
| `spot` | `spot_init_tables` | `spot_history_data_load` | `scheduleJob_spot_data_daily` |
| `fx` | `fx_init_tables` | `fx_history_data_load` | `scheduleJob_fx_data_daily` |
| `llm` | `llm_init_tables` | `llm_history_data_load` | `scheduleJob_llm_data_daily` |
## 注意事项
- 必须在 DolphinDB Web 平台中以已登录用户身份执行。
- `token` 不要写入公开仓库或提交到版本控制。
- Tushare API 的接口权限、积分和频控由 Tushare 账号决定。
- `tableNamesByDomain={}` 会导入所选数据域下所有已实现表。
- 日期使用 DolphinDB `DATE` 字面量,不是字符串,例如 `2026.01.01`。
Files in this skill
- README.md
- SKILL.md
- scripts/DolphinDBModules/easy_tushare/bond/bond_append_data.dos
- scripts/DolphinDBModules/easy_tushare/bond/bond_create_table.dos
- scripts/DolphinDBModules/easy_tushare/bond/bond_init.dos
- scripts/DolphinDBModules/easy_tushare/bond/bond_schedulejob.dos
- scripts/DolphinDBModules/easy_tushare/etf/etf_append_data.dos
- scripts/DolphinDBModules/easy_tushare/etf/etf_create_table.dos
- scripts/DolphinDBModules/easy_tushare/etf/etf_init.dos
- scripts/DolphinDBModules/easy_tushare/etf/etf_schedulejob.dos
- scripts/DolphinDBModules/easy_tushare/foreign_exchangre/fx_append_data.dos
- scripts/DolphinDBModules/easy_tushare/foreign_exchangre/fx_create_table.dos
- scripts/DolphinDBModules/easy_tushare/foreign_exchangre/fx_init.dos
- scripts/DolphinDBModules/easy_tushare/foreign_exchangre/fx_schedulejob.dos
- scripts/DolphinDBModules/easy_tushare/fund/fund_append_data.dos
- scripts/DolphinDBModules/easy_tushare/fund/fund_create_table.dos
- scripts/DolphinDBModules/easy_tushare/fund/fund_init.dos
- scripts/DolphinDBModules/easy_tushare/fund/fund_schedulejob.dos
- scripts/DolphinDBModules/easy_tushare/futures/futures_append_data.dos
- scripts/DolphinDBModules/easy_tushare/futures/futures_create_table.dos
Attribution
Comments
Loading comments…
Newsletter
Get the weekly list of safe new skills, and the ones we pulled.