Introduction #
Python datasets (also called “universal datasets”) allow writing Python code directly in the dataset editor, breaking through SQL query limitations. Enables: cross-data-source joins, Excel reading/processing, API data fetching and storage, calling LLM APIs, and other complex scenarios. The result must be assigned to the ds variable.
Python datasets require a super admin to create a Python connector. Dataset developers can use it directly.
Built-in Functions #
| Function | Description |
|---|---|
ds_sql(conn_name, sql) |
Get dataset via connection name and SQL |
ds_df(ds) |
Convert ds dataset to Pandas DataFrame |
ds_list(df) |
Convert DataFrame back to ds dataset |
ds_save(config, content, update=0) |
Write data to database |
ds_gpt(conn_name, prompt, ...) |
Call LLM for results |
ds_get(id, param=None) |
Get another dataset by ID |
Use Cases #
- When SQL queries can’t meet your needs, process query results further
- Need to use Excel data sources, or query data from different systems
- Also called universal dataset, can use any Python syntax
- In AI/LLM applications, can build powerful agents
- You don’t need to be familiar with Python to use it
First create a Python connector. Due to security, only super admins can create them.

Built-in Function Details #
# Variable conventions:
# Use ds for dataset variables, e.g., ds1, ds2
# Use df for pandas objects, e.g., df1, df2
# Get ds dataset via data source connection name and SQL
ds_sql(conn_name, sql)
# Write data to data source
ds_save(config, content, update=0)
# Returns {'status': 200, 'msg': 'success'} on success
# Get LLM results
ds_gpt(conn_name, prompt, stream=False, his='', tool=False, remark={})
# stream: enable streaming, his: history, tool: output tool calls, remark: model parameters
# Returns {'status': 200, 'msg': 'xxxx', 'token': 'xx'} on success
# If tool=True, returns {'tool': 'source_name', 'sql': 'xxxx'} or {'tool': 'agent_name', 'msg': 'xxxx'}
# or {'tool': 'agent_name', 'msg': '', 'param': {'xx': 'xxx'}}
ds_df(ds) # Convert ds dataset to pandas DataFrame
ds_list(df) # Convert pandas DataFrame to ds dataset
ds_get(id, param=None) # Get target ds dataset [rarely used]
Example Usage #
- Read Excel data for processing:
import pandas as pd
df = pd.read_excel('file_path', 'sheet_name')
df = df.groupby('province').agg({'count': 'sum'}).reset_index()
ds = ds_list(df)
- Generate dictionary-format datasets for multiple charts:
import pandas as pd
df = pd.read_excel('/Users/../smartdemo.xlsx', 'demo')
df0 = df.groupby('c3').agg({'qty': 'sum'}).reset_index()
df1 = df.groupby(['province', 'c3']).agg({'qty': 'sum'}).reset_index()
ds = {'df0': ds_list(df0), 'df1': ds_list(df1)}
- Cross-data-source SQL execution:
import pandas as pd
sql_str1 = '''select H1 as heroname, sum(qty) as count from T
/* where H2 = '$H2' */
group by H1 order by sum(qty) desc'''
sql_str2 = 'select heroname, qty as last_month_count from xxx'
ds1 = ds_sql('conn_name1', sql_str1)
df1 = ds_df(ds1)
ds2 = ds_sql('conn_name2', sql_str2)
df2 = ds_df(ds2)
df = pd.merge(df1, df2, how='left', on=['heroname'])
ds = ds_list(df)
- Fetch data via API and write to database:
import requests
header = {"Content-Type": "application/json", "x-acs-dingtalk-access-token": 'xxx'}
res = requests.post('https://xxx/api/xx', headers=header, data={'type': ''}).json()
result = res['data']
config = {'table': 'tablename', 'conn': 'conn_name'}
ds = ds_save(config, result)
Note: The final result must be assigned to the ds variable!!
Parameter passing works the same as standard datasets
ds_gpt Function Parameters #
ds_gpt(conn_name, prompt, stream=False, his='', tool=False, remark={})
| Parameter | Description |
|---|---|
conn_name |
LLM data source name (e.g., smtgpt) |
prompt |
Prompt content |
stream |
Enable streaming response (default False) |
his |
History conversation (string format) |
tool |
Parse tool call JSON (default False) |
remark |
Extra model parameters, e.g., {"temperature": 0.7} |
Return values:
- Normal mode:
{'status': 200, 'msg': 'response', 'token': usage} - tool=True:
{'tool': 'source_name', 'sql': '...'}or{'tool': 'agent_name', 'msg': '...', 'param': {...}}
Key convention: Python datasets must assign the final result to the
dsvariable, otherwise no output.