From ddd92681c179c0cccfb0f3f5c8b930074f6e200d Mon Sep 17 00:00:00 2001 From: qingss0 Date: Fri, 24 Jul 2026 06:13:35 +0800 Subject: [PATCH 01/10] init sqlite3 micro_servers Signed-off-by: qingss0 --- sqlite3/main.py | 56 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 sqlite3/main.py diff --git a/sqlite3/main.py b/sqlite3/main.py new file mode 100644 index 0000000..68d5d56 --- /dev/null +++ b/sqlite3/main.py @@ -0,0 +1,56 @@ +import sqlite3 +from flask import Flask, request, jsonify, g + +app = Flask(__name__) +app.config['DATABASE'] = 'database.db' + +def get_db(): + if 'db' not in g: + conn = sqlite3.connect(app.config['DATABASE']) + conn.row_factory = sqlite3.Row + g.db = conn + return g.db + +@app.teardown_appcontext +def close_db(exception): + db = g.pop('db', None) + if db is not None: + db.close() + +@app.route('/execute', methods=['POST']) +def execute_sql(): + data = request.get_json() + if not data or 'sql' not in data: + return jsonify({'success': False, 'error': '缺少 sql 字段'}), 400 + + sql = data['sql'].strip() + params = data.get('params', []) + + # 参数必须是列表、元组或字典 + if not isinstance(params, (list, tuple, dict)): + params = [] + + try: + db = get_db() + cur = db.execute(sql, params) + db.commit() # 对所有语句统一提交(只读语句提交也无副作用) + + # 尝试获取查询结果,对 INSERT/UPDATE/DELETE 等无返回数据的语句会抛异常 + try: + rows = cur.fetchall() + result = [dict(row) for row in rows] + except Exception: + result = [] # 无结果集时返回空数组 + + return jsonify({ + 'success': True, + 'data': result + }) + except Exception as e: + db = g.get('db') + if db: + db.rollback() + return jsonify({'success': False, 'error': str(e)}), 400 + +if __name__ == '__main__': + app.run(debug=True) \ No newline at end of file From f0a43f1da23e1253e47a3a4fed826122bd5fa92d Mon Sep 17 00:00:00 2001 From: qingss0 Date: Fri, 24 Jul 2026 06:15:14 +0800 Subject: [PATCH 02/10] =?UTF-8?q?update:=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=20LICENSE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: qingss0 --- dnfs/LICENSE | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dnfs/LICENSE b/dnfs/LICENSE index 63b4b68..c58cae3 100644 --- a/dnfs/LICENSE +++ b/dnfs/LICENSE @@ -1,6 +1,6 @@ MIT License -Copyright (c) [year] [fullname] +Copyright (c) 2025 卿松 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal From 4a467b509842e1023aa0412acd9c1568453b16b9 Mon Sep 17 00:00:00 2001 From: qingss0 Date: Fri, 24 Jul 2026 06:15:37 +0800 Subject: [PATCH 03/10] =?UTF-8?q?new:=20=E6=96=B0=E5=BB=BA=E6=96=87?= =?UTF-8?q?=E4=BB=B6=20LICENSE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: qingss0 --- sqlite3/LICENSE | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) create mode 100644 sqlite3/LICENSE diff --git a/sqlite3/LICENSE b/sqlite3/LICENSE new file mode 100644 index 0000000..3850104 --- /dev/null +++ b/sqlite3/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2026 卿松 + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. \ No newline at end of file From 5efbfd90fb024df3d9c2f4878cd30fcf7ba50c5c Mon Sep 17 00:00:00 2001 From: qingss0 Date: Fri, 24 Jul 2026 06:16:57 +0800 Subject: [PATCH 04/10] =?UTF-8?q?new:=20=E6=96=B0=E5=BB=BA=E6=96=87?= =?UTF-8?q?=E4=BB=B6=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: qingss0 --- sqlite3/README.md | 248 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 248 insertions(+) create mode 100644 sqlite3/README.md diff --git a/sqlite3/README.md b/sqlite3/README.md new file mode 100644 index 0000000..8e72e1f --- /dev/null +++ b/sqlite3/README.md @@ -0,0 +1,248 @@ +# Flask SQLite 执行服务 + +一个轻量级的 Flask HTTP 服务,用于安全地执行带参数的 SQLite SQL 语句,支持 `?` 和命名参数占位符,杜绝 SQL 注入。 + +## 功能特点 + +- 通过 JSON 接口发送 SQL 和参数 +- 强制使用参数绑定(`execute(sql, params)`),无 SQL 注入风险 +- 统一返回格式,所有语句执行结果均包含 `data` 数组 +- 自动事务管理,异常时回滚 +- 无外部依赖(除 Flask),即开即用 + +## 快速开始 + +### 环境要求 + +- Python 3.7+ +- pip + +### 安装依赖 + +```bash +pip install flask +``` + +### 启动服务 + +```bash +python app.py +``` + +服务默认监听 `http://127.0.0.1:5000`,数据库文件 `database.db` 会在首次连接时自动创建(你需要预先建表或通过接口执行 `CREATE TABLE`)。 + +## API 文档 + +### 执行 SQL 语句 + +**端点**:`POST /execute` + +**请求格式**:`Content-Type: application/json` + +```json +{ + "sql": "SQL 语句,使用 ? 或 :key 作为占位符", + "params": [] 或 {} +} +``` + +- `sql`:待执行的 SQL 语句(仅允许单条语句) +- `params`:参数列表 `[值1, 值2, ...]` 或参数字典 `{"key": 值}` + +**成功响应**: + +```json +{ + "success": true, + "data": [] // 查询结果数组,每条记录为字典;非查询语句返回空数组 +} +``` + +**错误响应**: + +```json +{ + "success": false, + "error": "错误描述" +} +``` + +## 使用示例 + +以下示例均通过 `curl` 和 Python `requests` 库演示。 + +### 1. 创建数据表 + +```bash +curl -X POST http://localhost:5000/execute \ + -H "Content-Type: application/json" \ + -d '{"sql": "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER)"}' +``` + +Python 版本: + +```python +import requests + +url = "http://localhost:5000/execute" +payload = { + "sql": "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER)" +} +resp = requests.post(url, json=payload) +print(resp.json()) # {"success": true, "data": []} +``` + +### 2. 插入数据(使用 `?` 占位符) + +```bash +curl -X POST http://localhost:5000/execute \ + -H "Content-Type: application/json" \ + -d '{"sql": "INSERT INTO users (name, age) VALUES (?, ?)", "params": ["Alice", 30]}' +``` + +Python 版本: + +```python +payload = { + "sql": "INSERT INTO users (name, age) VALUES (?, ?)", + "params": ["Bob", 25] +} +resp = requests.post(url, json=payload) +print(resp.json()) # {"success": true, "data": []} +``` + +### 3. 插入数据(使用命名参数 `:key`) + +```bash +curl -X POST http://localhost:5000/execute \ + -H "Content-Type: application/json" \ + -d '{"sql": "INSERT INTO users (name, age) VALUES (:name, :age)", "params": {"name": "Charlie", "age": 28}}' +``` + +### 4. 查询全部数据 + +```bash +curl -X POST http://localhost:5000/execute \ + -H "Content-Type: application/json" \ + -d '{"sql": "SELECT * FROM users"}' +``` + +响应示例: + +```json +{ + "success": true, + "data": [ + {"id": 1, "name": "Alice", "age": 30}, + {"id": 2, "name": "Bob", "age": 25}, + {"id": 3, "name": "Charlie", "age": 28} + ] +} +``` + +Python 版本: + +```python +payload = {"sql": "SELECT * FROM users"} +resp = requests.post(url, json=payload) +users = resp.json()["data"] +for user in users: + print(user["name"], user["age"]) +``` + +### 5. 按条件查询 + +```bash +curl -X POST http://localhost:5000/execute \ + -H "Content-Type: application/json" \ + -d '{"sql": "SELECT * FROM users WHERE age > ?", "params": [26]}' +``` + +Python 版本: + +```python +payload = { + "sql": "SELECT * FROM users WHERE age > :min_age", + "params": {"min_age": 26} +} +resp = requests.post(url, json=payload) +print(resp.json()["data"]) +``` + +### 6. 更新数据 + +```bash +curl -X POST http://localhost:5000/execute \ + -H "Content-Type: application/json" \ + -d '{"sql": "UPDATE users SET age = ? WHERE name = ?", "params": [31, "Alice"]}' +``` + +Python 版本: + +```python +payload = { + "sql": "UPDATE users SET age = :new_age WHERE id = :user_id", + "params": {"new_age": 26, "user_id": 2} +} +resp = requests.post(url, json=payload) +print(resp.json()) # {"success": true, "data": []} +``` + +### 7. 删除数据 + +```bash +curl -X POST http://localhost:5000/execute \ + -H "Content-Type: application/json" \ + -d '{"sql": "DELETE FROM users WHERE id = ?", "params": [3]}' +``` + +Python 版本: + +```python +payload = { + "sql": "DELETE FROM users WHERE name = :name", + "params": {"name": "Charlie"} +} +resp = requests.post(url, json=payload) +print(resp.json()) +``` + +### 8. 错误处理示例 + +当 SQL 或参数错误时,返回明确的错误信息: + +```bash +curl -X POST http://localhost:5000/execute \ + -H "Content-Type: application/json" \ + -d '{"sql": "SELECT * FROM nonexistent_table"}' +``` + +响应: + +```json +{ + "success": false, + "error": "no such table: nonexistent_table" +} +``` + +## 安全机制 + +1. **参数绑定**:使用 `sqlite3` 官方推荐的 `execute(sql, params)` 方式传参,参数值与 SQL 结构完全分离。 +2. **单语句执行**:`sqlite3.execute()` 仅执行第一条语句,无法通过分号注入多条命令。 +3. **错误回滚**:若执行过程中出现异常,已修改的数据会回滚,确保数据一致性。 + +## 项目结构 + +``` +. +├── app.py # 主程序 +└── README.md # 本文档 +``` + +数据库文件 `database.db` 会在运行时自动生成。 + +## 注意事项 + +- 该服务无认证机制,请勿直接暴露在公网;如需使用,请配合反向代理并增加鉴权。 +- 所有写操作(INSERT/UPDATE/DELETE 等)会立即提交,且 `data` 字段固定为空数组。 \ No newline at end of file From 50acc3bdd2f2dfa5bc4ba1ce9d1c84c0bc7d1da6 Mon Sep 17 00:00:00 2001 From: qingss0 Date: Fri, 24 Jul 2026 06:18:30 +0800 Subject: [PATCH 05/10] =?UTF-8?q?update:=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=20main.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: qingss0 --- sqlite3/main.py | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sqlite3/main.py b/sqlite3/main.py index 68d5d56..55e0aa3 100644 --- a/sqlite3/main.py +++ b/sqlite3/main.py @@ -1,5 +1,6 @@ import sqlite3 from flask import Flask, request, jsonify, g +from waitress import serve app = Flask(__name__) app.config['DATABASE'] = 'database.db' @@ -33,14 +34,13 @@ def execute_sql(): try: db = get_db() cur = db.execute(sql, params) - db.commit() # 对所有语句统一提交(只读语句提交也无副作用) + db.commit() - # 尝试获取查询结果,对 INSERT/UPDATE/DELETE 等无返回数据的语句会抛异常 try: rows = cur.fetchall() result = [dict(row) for row in rows] except Exception: - result = [] # 无结果集时返回空数组 + result = [] return jsonify({ 'success': True, @@ -53,4 +53,5 @@ def execute_sql(): return jsonify({'success': False, 'error': str(e)}), 400 if __name__ == '__main__': - app.run(debug=True) \ No newline at end of file + # 单线程单进程,绑定 127.0.0.1:5000 + serve(app, host='127.0.0.1', port=5000, threads=1) \ No newline at end of file From cf8c1f5314b9a278c8167bf99e366bce5ff1e271 Mon Sep 17 00:00:00 2001 From: qingss0 Date: Fri, 24 Jul 2026 06:19:27 +0800 Subject: [PATCH 06/10] =?UTF-8?q?update:=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=20README.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: qingss0 --- sqlite3/README.md | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/sqlite3/README.md b/sqlite3/README.md index 8e72e1f..5137202 100644 --- a/sqlite3/README.md +++ b/sqlite3/README.md @@ -1,3 +1,4 @@ + # Flask SQLite 执行服务 一个轻量级的 Flask HTTP 服务,用于安全地执行带参数的 SQLite SQL 语句,支持 `?` 和命名参数占位符,杜绝 SQL 注入。 @@ -8,7 +9,7 @@ - 强制使用参数绑定(`execute(sql, params)`),无 SQL 注入风险 - 统一返回格式,所有语句执行结果均包含 `data` 数组 - 自动事务管理,异常时回滚 -- 无外部依赖(除 Flask),即开即用 +- 单线程单进程模式,绑定 127.0.0.1,仅本地访问 ## 快速开始 @@ -20,7 +21,7 @@ ### 安装依赖 ```bash -pip install flask +pip install flask waitress ``` ### 启动服务 @@ -29,7 +30,7 @@ pip install flask python app.py ``` -服务默认监听 `http://127.0.0.1:5000`,数据库文件 `database.db` 会在首次连接时自动创建(你需要预先建表或通过接口执行 `CREATE TABLE`)。 +服务运行在 `http://127.0.0.1:5000`,仅允许本地访问。数据库文件 `database.db` 会在首次连接时自动创建(可提前建表或通过接口执行 `CREATE TABLE`)。 ## API 文档 @@ -74,7 +75,7 @@ python app.py ### 1. 创建数据表 ```bash -curl -X POST http://localhost:5000/execute \ +curl -X POST http://127.0.0.1:5000/execute \ -H "Content-Type: application/json" \ -d '{"sql": "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER)"}' ``` @@ -84,7 +85,7 @@ Python 版本: ```python import requests -url = "http://localhost:5000/execute" +url = "http://127.0.0.1:5000/execute" payload = { "sql": "CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT NOT NULL, age INTEGER)" } @@ -95,7 +96,7 @@ print(resp.json()) # {"success": true, "data": []} ### 2. 插入数据(使用 `?` 占位符) ```bash -curl -X POST http://localhost:5000/execute \ +curl -X POST http://127.0.0.1:5000/execute \ -H "Content-Type: application/json" \ -d '{"sql": "INSERT INTO users (name, age) VALUES (?, ?)", "params": ["Alice", 30]}' ``` @@ -114,7 +115,7 @@ print(resp.json()) # {"success": true, "data": []} ### 3. 插入数据(使用命名参数 `:key`) ```bash -curl -X POST http://localhost:5000/execute \ +curl -X POST http://127.0.0.1:5000/execute \ -H "Content-Type: application/json" \ -d '{"sql": "INSERT INTO users (name, age) VALUES (:name, :age)", "params": {"name": "Charlie", "age": 28}}' ``` @@ -122,7 +123,7 @@ curl -X POST http://localhost:5000/execute \ ### 4. 查询全部数据 ```bash -curl -X POST http://localhost:5000/execute \ +curl -X POST http://127.0.0.1:5000/execute \ -H "Content-Type: application/json" \ -d '{"sql": "SELECT * FROM users"}' ``` @@ -153,7 +154,7 @@ for user in users: ### 5. 按条件查询 ```bash -curl -X POST http://localhost:5000/execute \ +curl -X POST http://127.0.0.1:5000/execute \ -H "Content-Type: application/json" \ -d '{"sql": "SELECT * FROM users WHERE age > ?", "params": [26]}' ``` @@ -172,7 +173,7 @@ print(resp.json()["data"]) ### 6. 更新数据 ```bash -curl -X POST http://localhost:5000/execute \ +curl -X POST http://127.0.0.1:5000/execute \ -H "Content-Type: application/json" \ -d '{"sql": "UPDATE users SET age = ? WHERE name = ?", "params": [31, "Alice"]}' ``` @@ -191,7 +192,7 @@ print(resp.json()) # {"success": true, "data": []} ### 7. 删除数据 ```bash -curl -X POST http://localhost:5000/execute \ +curl -X POST http://127.0.0.1:5000/execute \ -H "Content-Type: application/json" \ -d '{"sql": "DELETE FROM users WHERE id = ?", "params": [3]}' ``` @@ -212,7 +213,7 @@ print(resp.json()) 当 SQL 或参数错误时,返回明确的错误信息: ```bash -curl -X POST http://localhost:5000/execute \ +curl -X POST http://127.0.0.1:5000/execute \ -H "Content-Type: application/json" \ -d '{"sql": "SELECT * FROM nonexistent_table"}' ``` @@ -231,12 +232,13 @@ curl -X POST http://localhost:5000/execute \ 1. **参数绑定**:使用 `sqlite3` 官方推荐的 `execute(sql, params)` 方式传参,参数值与 SQL 结构完全分离。 2. **单语句执行**:`sqlite3.execute()` 仅执行第一条语句,无法通过分号注入多条命令。 3. **错误回滚**:若执行过程中出现异常,已修改的数据会回滚,确保数据一致性。 +4. **本地绑定**:服务监听 `127.0.0.1`,仅本机可访问,避免网络暴露风险。 ## 项目结构 ``` . -├── app.py # 主程序 +├── app.py # 主程序(使用 waitress 单线程模式) └── README.md # 本文档 ``` @@ -244,5 +246,6 @@ curl -X POST http://localhost:5000/execute \ ## 注意事项 -- 该服务无认证机制,请勿直接暴露在公网;如需使用,请配合反向代理并增加鉴权。 -- 所有写操作(INSERT/UPDATE/DELETE 等)会立即提交,且 `data` 字段固定为空数组。 \ No newline at end of file +- 服务采用 waitress 单线程模式(`threads=1`),确保请求顺序执行,适合低并发场景。 +- 如需处理更高并发,可适当增加 `threads` 参数(例如 `threads=4`),但仍需注意 SQLite 的并发限制。 +- 该服务无认证机制,推荐仅在本机或内网可信环境使用。如需对外服务,请添加鉴权并考虑使用 nginx 等反向代理。 \ No newline at end of file From ed7bf5be1df4bbaa5d878c2e7d6a6a0a5cfa5086 Mon Sep 17 00:00:00 2001 From: qingss0 Date: Fri, 24 Jul 2026 06:19:54 +0800 Subject: [PATCH 07/10] =?UTF-8?q?new:=20=E6=96=B0=E5=BB=BA=E6=96=87?= =?UTF-8?q?=E4=BB=B6=20requirements.txt?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: qingss0 --- sqlite3/requirements.txt | 2 ++ 1 file changed, 2 insertions(+) create mode 100644 sqlite3/requirements.txt diff --git a/sqlite3/requirements.txt b/sqlite3/requirements.txt new file mode 100644 index 0000000..02ebaab --- /dev/null +++ b/sqlite3/requirements.txt @@ -0,0 +1,2 @@ +flask +waitress \ No newline at end of file From 098cc074b0a0538703f94ac01cf597a1a326f7fa Mon Sep 17 00:00:00 2001 From: qingss0 Date: Fri, 24 Jul 2026 06:20:41 +0800 Subject: [PATCH 08/10] =?UTF-8?q?new:=20=E6=96=B0=E5=BB=BA=E6=96=87?= =?UTF-8?q?=E4=BB=B6=20=5Fset.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: qingss0 --- sqlite3/_set.sh | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 sqlite3/_set.sh diff --git a/sqlite3/_set.sh b/sqlite3/_set.sh new file mode 100644 index 0000000..477ce1c --- /dev/null +++ b/sqlite3/_set.sh @@ -0,0 +1,6 @@ +#!/bin/bash +cd "$(dirname "$0")" || exit +python3 -m venv venv +source venv/bin/activate +pip install -r requirements.txt -i https://pypi.tuna.tsinghua.edu.cn/simple +nuitka --onefile --jobs=1 main.py From fcdcdcff0976e1df5c8d020e2ec676a7dab982b0 Mon Sep 17 00:00:00 2001 From: qingss0 Date: Fri, 24 Jul 2026 06:21:11 +0800 Subject: [PATCH 09/10] =?UTF-8?q?new:=20=E6=96=B0=E5=BB=BA=E6=96=87?= =?UTF-8?q?=E4=BB=B6=20=5Frun.sh?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: qingss0 --- sqlite3/_run.sh | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 sqlite3/_run.sh diff --git a/sqlite3/_run.sh b/sqlite3/_run.sh new file mode 100644 index 0000000..201be20 --- /dev/null +++ b/sqlite3/_run.sh @@ -0,0 +1,5 @@ +#!/bin/bash +cd "$(dirname "$0")" || exit +source ./venv/bin/activate +#exec ./main.bin +exec python3 main.py From fbeba0585067fa8b2984a5cea1d7d7e1dd59a547 Mon Sep 17 00:00:00 2001 From: qingss0 Date: Fri, 24 Jul 2026 06:22:15 +0800 Subject: [PATCH 10/10] =?UTF-8?q?update:=20=E6=9B=B4=E6=96=B0=E6=96=87?= =?UTF-8?q?=E4=BB=B6=20main.py?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: qingss0 --- sqlite3/main.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sqlite3/main.py b/sqlite3/main.py index 55e0aa3..dbb01a1 100644 --- a/sqlite3/main.py +++ b/sqlite3/main.py @@ -53,5 +53,5 @@ def execute_sql(): return jsonify({'success': False, 'error': str(e)}), 400 if __name__ == '__main__': - # 单线程单进程,绑定 127.0.0.1:5000 - serve(app, host='127.0.0.1', port=5000, threads=1) \ No newline at end of file + # 单线程单进程,绑定 127.0.0.1:8005 + serve(app, host='127.0.0.1', port=8005, threads=1) \ No newline at end of file