1 line
5.9 KiB
JSON
1 line
5.9 KiB
JSON
{"data":{"edges":[],"nodes":[{"data":{"node":{"template":{"_type":"Component","code":{"type":"code","required":true,"placeholder":"","list":false,"show":true,"multiline":true,"value":"import os\nfrom langflow.io import Output, MultiselectInput\nfrom langchain_community.utilities import SQLDatabase\nfrom langflow.custom import Component\nfrom langflow.schema import Data\nfrom typing import List, Optional, Any\n\nclass DatasetQueryComponent(Component):\n\n display_name = \"数据集查询\"\n description = \"执行数据集查询\"\n documentation: str = \"https://docs.langflow.org/components-custom-components\"\n name = \"DatasetQueryComponent\"\n icon = \"Database\"\n\n localDB: SQLDatabase = None\n\n def __init__(self, **kwargs):\n super().__init__(**kwargs)\n self._init_inputs()\n\n def _init_inputs(self):\n # 初始化输入字段\n self.inputs = [\n MultiselectInput(\n name=\"dataset_name\",\n display_name=\"请选择模型所需数据集\",\n info=\"数据集\",\n options=self._get_dataset_options(), # 动态获取数据集选项\n real_time_refresh=True, # 启用实时刷新\n refresh_button=True, # 显示刷新按钮\n value=[],\n ),\n ]\n\n def _get_dataset_options(self) -> List[str]:\n \"\"\"\n 从数据库中获取数据集选项\n \"\"\"\n uri = os.getenv('LANGFLOW_DATABASE_URL')\n if not uri:\n raise ValueError(\"环境变量 LANGFLOW_DATABASE_URL 未设置\")\n \n self.localDB = SQLDatabase.from_uri(uri)\n # 查询数据集信息\n datasetInfo = self.localDB._execute(\n command=\"SELECT dataset.name FROM dataset INNER JOIN miniofile ON dataset.id = miniofile.dataset_id GROUP BY dataset.id\",\n fetch=\"all\"\n )\n # 生成数据集选项列表\n return [f\"{row['name']}\" for row in datasetInfo]\n\n def update_build_config(self, build_config: dict, field_value: Any, field_name: Optional[str] = None):\n \"\"\"\n 更新构建配置,支持动态刷新数据集选项\n \"\"\"\n if field_name == 'dataset_name':\n # 如果字段是 dataset_name,则更新选项\n build_config[field_name]['options'] = self._get_dataset_options()\n return super().update_build_config(build_config, field_value, field_name)\n\n outputs = [\n Output(display_name=\"查询结果\", name=\"output\", method=\"build_output\"),\n ]\n\n def build_output(self) -> Data:\n \"\"\"\n 构建输出结果\n \"\"\"\n if not self.dataset_name:\n raise ValueError(\"未选择数据集\")\n\n uri = os.getenv('LANGFLOW_DATABASE_URL')\n if not uri:\n raise ValueError(\"环境变量 LANGFLOW_DATABASE_URL 未设置\")\n \n self.localDB = SQLDatabase.from_uri(uri)\n dataset_tuple = tuple(self.dataset_name)\n\n # 构造 SQL 查询语句\n if len(dataset_tuple) == 1:\n query = f\"\"\"\n SELECT miniofile.filename, miniofile.file_url \n FROM miniofile \n WHERE miniofile.dataset_id IN (\n SELECT dataset.id \n FROM dataset \n WHERE dataset.name = '{dataset_tuple[0]}'\n )\n \"\"\"\n else:\n placeholders = \",\".join(f\"'{name}'\" for name in dataset_tuple)\n query = f\"\"\"\n SELECT miniofile.filename, miniofile.file_url \n FROM miniofile \n WHERE miniofile.dataset_id IN (\n SELECT dataset.id \n FROM dataset \n WHERE dataset.name IN ({placeholders})\n )\n \"\"\"\n\n # 执行查询\n result = self.localDB._execute(command=query, fetch=\"all\")\n file_map = {item[\"filename\"]: item[\"file_url\"] for item in result}\n return Data(data={\"file_urls\": file_map})","fileTypes":[],"file_path":"","password":false,"name":"code","advanced":true,"dynamic":true,"info":"","load_from_db":false,"title_case":false},"dataset_name":{"tool_mode":false,"trace_as_metadata":true,"options":["4","融合模型-天气数据","融合模型-环境数据","jpgupdate","机理模型-天气数据","融合模型-模型集","机理模型-环境数据","融合模型-模型信息","柑橘病害图像识别数据集"],"combobox":false,"list":true,"list_add_label":"Add More","required":false,"placeholder":"","show":true,"name":"dataset_name","value":["融合模型-环境数据"],"display_name":"请选择模型所需数据集","advanced":false,"dynamic":false,"info":"数据集","real_time_refresh":true,"refresh_button":true,"title_case":false,"type":"str","_input_type":"MultiselectInput"}},"description":"执行数据集查询","icon":"Database","base_classes":["Data"],"display_name":"数据集查询","documentation":"https://docs.langflow.org/components-custom-components","minimized":false,"custom_fields":{},"output_types":[],"pinned":false,"conditional_paths":[],"frozen":false,"outputs":[{"types":["Data"],"selected":"Data","name":"output","hidden":null,"display_name":"查询结果","method":"build_output","value":"__UNDEFINED__","cache":true,"required_inputs":null,"allows_loop":false,"tool_mode":true}],"field_order":["dataset_name"],"beta":false,"legacy":false,"edited":false,"metadata":{},"tool_mode":false,"official":false},"showNode":false,"type":"DatasetQueryComponent","id":"DatasetQueryComponent-Py5jk"},"id":"DatasetQueryComponent-Py5jk","position":{"x":0,"y":0},"type":"genericNode"}],"viewport":{"x":1,"y":1,"zoom":1}},"description":"执行数据集查询","name":"数据集查询","id":"DatasetQueryComponent-Py5jk","is_component":true,"last_tested_version":"1.1.5"} |