This commit is contained in:
dataeaseShu
2025-07-23 11:46:32 +08:00
6 changed files with 22 additions and 15 deletions
+1 -1
View File
@@ -30,7 +30,7 @@ async def get_datasource(session: SessionDep, id: int):
@router.post("/check")
async def check(session: SessionDep, ds: CoreDatasource):
return check_status(session, ds)
return check_status(session, ds, True)
@router.post("/add", response_model=CoreDatasource)
+3 -2
View File
@@ -35,14 +35,15 @@ def get_ds(session: SessionDep, id: int):
return datasource
def check_status(session: SessionDep, ds: CoreDatasource):
def check_status(session: SessionDep, ds: CoreDatasource, is_raise: bool = False):
conn = get_engine(ds)
try:
with conn.connect() as connection:
print("success")
return True
except Exception as e:
raise HTTPException(status_code=500, detail=e.args)
if is_raise:
raise HTTPException(status_code=500, detail=f'Connect Failed: {e.args}')
print("Fail:", e)
return False
+1 -1
View File
@@ -126,7 +126,7 @@ def get_tables(ds: CoreDatasource):
LEFT JOIN
pg_description d ON d.objoid = c.oid AND d.objsubid = 0
WHERE n.nspname = current_schema()
AND c.relkind IN ('r', 'v')
AND c.relkind IN ('r', 'v', 'p')
AND c.relname NOT LIKE 'pg_%'
AND c.relname NOT LIKE 'sql_%'
ORDER BY c.relname \
+1 -1
View File
@@ -36,7 +36,7 @@ dependencies = [
"pyyaml (>=6.0.2,<7.0.0)",
"fastapi-mcp (>=0.3.4,<0.4.0)",
"tabulate>=0.9.0",
"sqlbot-xpack==0.0.3.6",
"sqlbot-xpack==0.0.3.7",
"fastapi-cache2>=0.2.2",
"sqlparse>=0.5.3",
]
+5 -3
View File
@@ -13,7 +13,7 @@ template:
- 如数据库引擎是 PostgreSQL、Oracle,则在schema、表名、字段名、别名外层加双引号;
- 如数据库引擎是 MySQL,则在表名、字段名、别名外层加反引号;
- 如数据库引擎是 Microsoft SQL Server,则在schema、表名、字段名、别名外层加方括号。
- 如果生成SQL的字段内有时间格式的字段:
- 如果生成SQL的字段内有时间格式的字段(重要):
- 若提问中没有指定查询顺序,则默认按时间升序排序
- 若提问是时间,且没有指定具体格式,则格式化为yyyy-MM-dd HH:mm:ss的格式
- 若提问是日期,且没有指定具体格式,则格式化为yyyy-MM-dd的格式
@@ -29,6 +29,8 @@ template:
- 如果问题是图表展示相关且与生成SQL查询无关时,请参考上一次回答的SQL来生成SQL
- 如果问题是图表展示相关,可参考的图表类型为表格(table)、柱状图(column)、条形图(bar)、折线图(line)或饼图(pie),返回的JSON:
{{"success":true,"sql":"生成的SQL语句","chart-type":"选择的图表类型(table/column/bar/line/pie)","tables":["表名1","表名2",...]}}
- 生成的SQL查询结果可以用来进行图表展示,需要注意排序字段的排序优先级,例如:
- 柱状图或折线图:适合展示在横轴的字段优先排序,若SQL包含分类字段,则分类字段次一级排序
### 响应, 请直接返回JSON结果:
```json
@@ -55,7 +57,7 @@ template:
- 如果需要柱状图,则生成的 JSON 格式应为(如果有分类则在JSON中返回series):
{{"type":"column", "title": "标题", "axis": {{"x": {{"name":"x轴的中文名称", "value": "SQL 查询 x 轴的列(有别名用别名,去掉外层的反引号、双引号、方括号)"}}, "y": {{"name":"y轴的中文名称","value": "SQL 查询 y 轴的列(有别名用别名,去掉外层的反引号、双引号、方括号)"}}, "series": {{"name":"分类的中文名称","value":"SQL 查询分类的列(有别名用别名,去掉外层的反引号、双引号、方括号)"}}}}}}
必须从 SQL 查询列中提取“x”和“y”。
- 如果需要条形图,则生成的 JSON 格式应为(如果有分类则在JSON中返回series):
- 如果需要条形图,则生成的 JSON 格式应为(如果有分类则在JSON中返回series),条形图相当于是旋转后的柱状图,因此 x 轴仍为维度轴,y 轴仍为指标轴:
{{"type":"bar", "title": "标题", "axis": {{"x": {{"name":"x轴的中文名称", "value": "SQL 查询 x 轴的列(有别名用别名,去掉外层的反引号、双引号、方括号)"}}, "y": {{"name":"y轴的中文名称","value": "SQL 查询 y 轴的列(有别名用别名,去掉外层的反引号、双引号、方括号)"}}, "series": {{"name":"分类的中文名称","value":"SQL 查询分类的列(有别名用别名,去掉外层的反引号、双引号、方括号)"}}}}}}
必须从 SQL 查询列中提取“x”和“y”。
- 如果需要折线图,则生成的 JSON 格式应为(如果有分类则在JSON中返回series):
@@ -104,7 +106,7 @@ template:
- 最多返回4个你推测出的结果
- 若无法推测,则返回空数据JSON:
[]
- 不需要思考过程,或者尽量精简思考过程
- 不需要思考过程,或者尽量精简思考过程(重要)
### 响应, 请直接返回JSON结果:
```json
+11 -7
View File
@@ -95,12 +95,16 @@ const handleEditDatasource = (res: any) => {
})
}
const handleQuestion = (id: string) => {
router.push({
path: '/chat/index',
query: {
start_chat: id,
},
const handleQuestion = (ele: any) => {
datasourceApi.check(ele).then((res: any) => {
if (res) {
router.push({
path: '/chat/index',
query: {
start_chat: ele.id,
},
})
}
})
}
@@ -290,7 +294,7 @@ const back = () => {
:type-name="ele.type_name"
:num="ele.num"
:description="ele.description"
@question="handleQuestion"
@question="handleQuestion(ele)"
@edit="handleEditDatasource(ele)"
@del="deleteHandler(ele)"
@data-table-detail="dataTableDetail(ele)"