# pysever **Repository Path**: kcat11/pysever ## Basic Information - **Project Name**: pysever - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2025-09-24 - **Last Updated**: 2025-12-22 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 安装和运行 ### 1. 安装依赖 ```bash pip install -r requirements.txt ``` ### 2. 启动服务 ```bash python main.py ``` 服务将在 `http://localhost:8000` 启动 ### 3. 访问文档 - Swagger UI: `http://localhost:8000/docs` - ReDoc: `http://localhost:8000/redoc` ## API 接口 ### 1. 查询数据 **POST** `/api/Read/QueryDat` 查询数据库中的设备数据,支持分页和条件过滤。 #### 请求体 ```json { "tableName": "t_devicemodel", "field": "*", "where": "{\"senceId\": \"scene001\"}", "page": 1, "size": 10 } ``` #### 参数说明 - `tableName`: 表名,固定为 "t_devicemodel" - `field`: 查询字段,使用 "*" 查询所有字段 - `where`: JSON 字符串格式的查询条件 - `page`: 页码,从 1 开始 - `size`: 每页数据量 #### 响应示例 ```json { "code": 200, "message": "success", "data": { "data": [ { "id": 1, "senceId": "scene001", "modelName": "设备模型1", "deviceName": "测试设备", "pos": "100,200,300", "rot": "0,0,0" } ], "total": 1 }, "total": 1 } ``` ### 2. 获取模型模板 **GET** `/api/Read/GetModelTemplate/{sence_id}/{param}` 获取指定场景下的模型模板信息。 #### 路径参数 - `sence_id`: 场景ID - `param`: 参数(当前版本未使用) #### 请求示例 #### 响应示例 ```json { "code": 200, "date": "2025-01-27 10:30:00", "msg": "操作成功", "data": { "data": [ {"modelName": "设备模型1"}, {"modelName": "设备模型2"} ], "total": 2, "page": 1, "devCount": 5, "sceneSet": null } } ``` ### 3. 插入设备数据 **POST** `/api/Write/InsertDevice` 向数据库插入新的设备数据。 #### 请求体 ```json { "senceId": "scene001", "BuildName": "办公楼A", "floorName": "1楼", "modelName": "摄像头设备", "modelId": "cam_001", "typeId": "camera", "modelType": "监控摄像头", "pos": "100,200,300", "rot": "0,0,0", "sacle": "1,1,1", "modelJson": "{\"resolution\": \"1920x1080\"}", "inform": "设备信息", "customInform": "自定义信息", "SXTJSON": "{\"config\": \"default\"}", "pictureId": "pic_001", "videoPath": "/videos/", "networPortInfo": "192.168.1.100:8080", "backupParam": "backup_config", "linkData": "link_info", "uploadFile": "/uploads/", "wellType": "standard", "deviceName": "前门摄像头", "CamProjection": "perspective", "firePlanId": "fire_001", "filePath": "/files/", "panoramagramPath": "/panorama/", "inform_name": "设备名称", "iconUrl": "/icons/camera.png", "popUrl": "/popup/", "upTime": "2025-01-27 10:30:00", "customInformNew": "新自定义信息", "style": "modern", "color": "#FF0000" } ``` 简单案例 { "senceId": "scene001", "modelName": "摄像头设备", "deviceName": "前门摄像头", "pos": "100,200,300", "rot": "0,0,0" } ``` #### 响应示例 ```json { "code": 200, "date": "2025-01-27 15:30:00", "msg": "操作成功", "data": { "data": [ { "id": 123, "message": "设备数据插入成功" } ] } } ``` ## 数据模型 ### DeviceModel 字段说明 | 字段名 | 类型 | 说明 | 示例 | |--------|------|------|------| | id | int | 主键ID | 1 | | senceId | string | 场景ID | "scene001" | | BuildName | string | 建筑名称 | "办公楼A" | | floorName | string | 楼层名称 | "1楼" | | modelName | string | 模型名称 | "摄像头设备" | | modelId | string | 模型ID | "cam_001" | | typeId | string | 类型ID | "camera" | | modelType | string | 模型类型 | "监控摄像头" | | pos | string | 位置坐标 | "100,200,300" | | rot | string | 旋转角度 | "0,0,0" | | sacle | string | 缩放比例 | "1,1,1" | | deviceName | string | 设备名称 | "前门摄像头" | | DeleteStatus | string | 删除状态 | "0" | | upTime | string | 更新时间 | "2025-01-27 10:30:00" | ## 使用示例 ### 使用 curl 测试 #### 1. 查询数据 ```bash curl -X POST "http://localhost:8000/api/Read/QueryDat" \ -H "Content-Type: application/json" \ -d '{ "tableName": "t_devicemodel", "field": "*", "where": "{\"senceId\": \"scene001\"}", "page": 1, "size": 10 }' ``` #### 2. 获取模型模板 ```bash curl -X GET "http://localhost:8000/api/Read/GetModelTemplate/scene001/template" ``` #### 3. 插入设备数据 ```bash curl -X POST "http://localhost:8000/api/Write/InsertDevice" \ -H "Content-Type: application/json" \ -d '{ "senceId": "scene001", "modelName": "测试设备", "deviceName": "测试设备名称", "pos": "100,200,300", "rot": "0,0,0" }' ``` ### 使用 Python requests ```python import requests import json # 查询数据 response = requests.post( "http://localhost:8000/api/Read/QueryDat", json={ "tableName": "t_devicemodel", "field": "*", "where": json.dumps({"senceId": "scene001"}), "page": 1, "size": 10 } ) print(response.json()) # 插入设备数据 response = requests.post( "http://localhost:8000/api/Write/InsertDevice", json={ "senceId": "scene001", "modelName": "测试设备", "deviceName": "测试设备名称", "pos": "100,200,300", "rot": "0,0,0" } ) print(response.json()) ``` ## 错误处理 API 使用标准的 HTTP 状态码: - `200`: 成功 - `400`: 请求参数错误 - `500`: 服务器内部错误 错误响应格式: ```json { "detail": "错误信息描述" } ``` ## 修改数据 ### 使用 Python requests 修改设备数据 ## 目标ID 45773 修改数据可以通过调用 `/api/Write/UpdateDevice` 接口实现。需要传递完整的设备数据(包含已存在设备的 `id` 字段),未指定的字段会被设置为默认值或 `null`。 ```python import requests # 修改设备数据(以更新 id=1 的设备为例) response = requests.post( "http://localhost:8000/api/Write/UpdateDevice", json={ "id": 1, "senceId": "scene001", "modelName": "更新后的设备名", "deviceName": "新设备名称", "pos": "120,220,320", "rot": "0,90,0" } ) print(response.json()) ``` 接口返回成功时的格式: ```json { "code": 200, "date": "2025-01-27 10:30:00", "msg": "操作成功", "data": { "data": [ { "id": 1, "message": "设备数据更新成功" } ] } } ``` > 请确保要更新的数据 `id` 已存在。 ## 注意事项 1. 数据库文件 `jdsencemodelmanags.wb` 需要与项目在同一目录 2. 所有时间字段使用 `YYYY-MM-DD HH:MM:SS` 格式 3. 坐标和角度字段使用逗号分隔的字符串格式 4. JSON 字段需要是有效的 JSON 字符串 5. 插入数据时,`id` 字段会自动生成,无需手动指定 ## 技术栈 - **FastAPI**: Web 框架 - **SQLModel**: ORM 框架 - **SQLite**: 数据库 - **Uvicorn**: ASGI 服务器 - **Pydantic**: 数据验证