sql-assistant 1.0.0__tar.gz → 1.0.2__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- sql_assistant-1.0.2/.gitignore +123 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/PKG-INFO +14 -2
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/README.md +21 -1
- sql_assistant-1.0.2/pyproject.toml +55 -0
- sql_assistant-1.0.2/pytest.ini +4 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/api/dependencies.py +5 -0
- sql_assistant-1.0.2/src/sql_assistant/api/explain.py +481 -0
- sql_assistant-1.0.2/src/sql_assistant/api/export.py +165 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/api/models.py +118 -1
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/api/routes.py +7 -1
- sql_assistant-1.0.2/src/sql_assistant/api/templates.py +83 -0
- sql_assistant-1.0.2/src/sql_assistant/database/explain.py +219 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/database/history.py +14 -9
- sql_assistant-1.0.2/src/sql_assistant/database/templates.py +190 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/css/base.css +5 -1
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/css/components/chat.css +104 -0
- sql_assistant-1.0.2/src/sql_assistant/web/static/css/components/explain.css +616 -0
- sql_assistant-1.0.2/src/sql_assistant/web/static/css/components/navbar.css +183 -0
- sql_assistant-1.0.2/src/sql_assistant/web/static/css/components/templates.css +198 -0
- sql_assistant-1.0.2/src/sql_assistant/web/static/css/components/toast.css +32 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/css/style.css +4 -1
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/js/app.js +12 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/js/chat.js +28 -3
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/js/conversations.js +1 -1
- sql_assistant-1.0.2/src/sql_assistant/web/static/js/explain.js +531 -0
- sql_assistant-1.0.2/src/sql_assistant/web/static/js/export.js +223 -0
- sql_assistant-1.0.2/src/sql_assistant/web/static/js/navbar.js +93 -0
- sql_assistant-1.0.2/src/sql_assistant/web/static/js/templates.js +221 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/js/theme-manager.js +2 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/js/ui.js +10 -1
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/templates/index.html +131 -32
- sql_assistant-1.0.2/tests/__init__.py +0 -0
- sql_assistant-1.0.2/tests/test_api_routes.py +76 -0
- sql_assistant-1.0.2/tests/test_backup.py +84 -0
- sql_assistant-1.0.2/tests/test_config.py +144 -0
- sql_assistant-1.0.2/tests/test_database_connectors.py +131 -0
- sql_assistant-1.0.2/tests/test_database_manager.py +27 -0
- sql_assistant-1.0.2/tests/test_explain.py +88 -0
- sql_assistant-1.0.2/tests/test_export.py +83 -0
- sql_assistant-1.0.2/tests/test_history.py +80 -0
- sql_assistant-1.0.2/tests/test_llm_manager.py +43 -0
- sql_assistant-1.0.2/tests/test_templates.py +110 -0
- sql_assistant-1.0.0/.gitignore +0 -116
- sql_assistant-1.0.0/pyproject.toml +0 -34
- sql_assistant-1.0.0/src/sql_assistant/web/static/css/components/toast.css +0 -30
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/LICENSE +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/__init__.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/api/__init__.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/api/backup.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/api/config.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/api/conversation.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/api/history.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/api/query.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/api/schema.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/config.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/database/__init__.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/database/backup.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/database/connectors/__init__.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/database/connectors/base.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/database/connectors/exceptions.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/database/connectors/mongodb.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/database/connectors/mysql.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/database/connectors/postgresql.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/database/connectors/redis.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/database/connectors/sqlserver.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/database/manager.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/database/security.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/llm/__init__.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/llm/base.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/llm/exceptions.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/llm/manager.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/llm/prompts.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/llm/providers/__init__.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/llm/providers/claude.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/llm/providers/gemini.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/llm/providers/openai_compatible.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/llm/retry.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/main.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/settings.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/__init__.py +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/css/components/backup.css +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/css/components/modal.css +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/css/components/settings.css +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/css/components/sidebar.css +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/css/theme.css +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/js/api.js +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/js/backup.js +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/js/color-theme-manager.js +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/js/confirm.js +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/js/settings.js +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/src/sql_assistant/web/static/js/state.js +0 -0
- {sql_assistant-1.0.0 → sql_assistant-1.0.2}/start.py +0 -0
|
@@ -0,0 +1,123 @@
|
|
|
1
|
+
# ==============================================================================
|
|
2
|
+
# SQL Assistant - .gitignore
|
|
3
|
+
# ==============================================================================
|
|
4
|
+
|
|
5
|
+
# ----------------------------
|
|
6
|
+
# Virtual Environment
|
|
7
|
+
# ----------------------------
|
|
8
|
+
.venv/
|
|
9
|
+
.env/
|
|
10
|
+
env/
|
|
11
|
+
venv/
|
|
12
|
+
ENV/
|
|
13
|
+
.env.local
|
|
14
|
+
.env.*.local
|
|
15
|
+
|
|
16
|
+
# ----------------------------
|
|
17
|
+
# Python
|
|
18
|
+
# ----------------------------
|
|
19
|
+
__pycache__/
|
|
20
|
+
*.pyc
|
|
21
|
+
*.pyo
|
|
22
|
+
*.pyd
|
|
23
|
+
.Python
|
|
24
|
+
*.egg-info/
|
|
25
|
+
uv.lock
|
|
26
|
+
pip-selfcheck.json
|
|
27
|
+
.hypothesis/
|
|
28
|
+
.pytest_cache/
|
|
29
|
+
.coverage
|
|
30
|
+
coverage.xml
|
|
31
|
+
htmlcov/
|
|
32
|
+
.tox/
|
|
33
|
+
|
|
34
|
+
# ----------------------------
|
|
35
|
+
# Build Artifacts
|
|
36
|
+
# ----------------------------
|
|
37
|
+
dist/
|
|
38
|
+
build/
|
|
39
|
+
*.whl
|
|
40
|
+
*.egg
|
|
41
|
+
.installed.cfg
|
|
42
|
+
|
|
43
|
+
# ----------------------------
|
|
44
|
+
# IDE & Editor
|
|
45
|
+
# ----------------------------
|
|
46
|
+
.vscode/
|
|
47
|
+
.idea/
|
|
48
|
+
.project
|
|
49
|
+
.pydevproject
|
|
50
|
+
.settings/
|
|
51
|
+
*.swp
|
|
52
|
+
*.swo
|
|
53
|
+
*~
|
|
54
|
+
.DS_Store
|
|
55
|
+
Thumbs.db
|
|
56
|
+
desktop.ini
|
|
57
|
+
|
|
58
|
+
# ----------------------------
|
|
59
|
+
# Logs
|
|
60
|
+
# ----------------------------
|
|
61
|
+
*.log
|
|
62
|
+
logs/
|
|
63
|
+
*.log.*
|
|
64
|
+
.logs/
|
|
65
|
+
|
|
66
|
+
# ----------------------------
|
|
67
|
+
# Configuration & Data
|
|
68
|
+
# ----------------------------
|
|
69
|
+
# 项目数据目录(配置、数据库、运行时数据)
|
|
70
|
+
.data/
|
|
71
|
+
# 旧版配置路径
|
|
72
|
+
~/.sql-assistant/
|
|
73
|
+
.sql-assistant/
|
|
74
|
+
# SQLite数据库文件
|
|
75
|
+
*.db
|
|
76
|
+
*.sqlite
|
|
77
|
+
*.sqlite3
|
|
78
|
+
*.db-journal
|
|
79
|
+
|
|
80
|
+
# ----------------------------
|
|
81
|
+
# Backup
|
|
82
|
+
# ----------------------------
|
|
83
|
+
# 数据库备份目录
|
|
84
|
+
backups/
|
|
85
|
+
|
|
86
|
+
# ----------------------------
|
|
87
|
+
# Security
|
|
88
|
+
# ----------------------------
|
|
89
|
+
*.pem
|
|
90
|
+
*.key
|
|
91
|
+
*.cert
|
|
92
|
+
*.crt
|
|
93
|
+
secrets/
|
|
94
|
+
.vault/
|
|
95
|
+
|
|
96
|
+
# ----------------------------
|
|
97
|
+
# Node.js (if used)
|
|
98
|
+
# ----------------------------
|
|
99
|
+
node_modules/
|
|
100
|
+
package-lock.json
|
|
101
|
+
yarn.lock
|
|
102
|
+
pnpm-lock.yaml
|
|
103
|
+
|
|
104
|
+
# ----------------------------
|
|
105
|
+
# Trae IDE
|
|
106
|
+
# ----------------------------
|
|
107
|
+
.codegraph/
|
|
108
|
+
|
|
109
|
+
# ----------------------------
|
|
110
|
+
# DeepSeek
|
|
111
|
+
# ----------------------------
|
|
112
|
+
.deepseek/
|
|
113
|
+
|
|
114
|
+
# ----------------------------
|
|
115
|
+
# Trae IDE Rules
|
|
116
|
+
# ----------------------------
|
|
117
|
+
.trae/
|
|
118
|
+
|
|
119
|
+
# ----------------------------
|
|
120
|
+
# Cache
|
|
121
|
+
# ----------------------------
|
|
122
|
+
.cache/
|
|
123
|
+
*.egg
|
|
@@ -1,8 +1,20 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sql-assistant
|
|
3
|
-
Version: 1.0.
|
|
4
|
-
Summary: SQL
|
|
3
|
+
Version: 1.0.2
|
|
4
|
+
Summary: SQL Smart Assistant - Natural Language to SQL query tool supporting major databases and LLMs
|
|
5
|
+
Author-email: fjz-hosts <2931742378@qq.com>
|
|
6
|
+
Maintainer-email: fjz-hosts <2931742378@qq.com>
|
|
5
7
|
License-File: LICENSE
|
|
8
|
+
Keywords: assistant,database,llm,natural-language,query,sql
|
|
9
|
+
Classifier: Development Status :: 4 - Beta
|
|
10
|
+
Classifier: Intended Audience :: Developers
|
|
11
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
12
|
+
Classifier: Programming Language :: Python :: 3
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
16
|
+
Classifier: Topic :: Database
|
|
17
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
6
18
|
Requires-Python: >=3.10
|
|
7
19
|
Requires-Dist: aiosqlite>=0.20.0
|
|
8
20
|
Requires-Dist: fastapi>=0.110.0
|
|
@@ -23,6 +23,9 @@
|
|
|
23
23
|
|
|
24
24
|
## 🗞️ News
|
|
25
25
|
|
|
26
|
+
- **2026-05-14** — 🎉 SQL Smart Assistant v1.0.1 released!
|
|
27
|
+
- Added SQL Template/Favorite functionality
|
|
28
|
+
- Added Execution Plan Analysis feature
|
|
26
29
|
- **2026-05-10** — 🎉 SQL Smart Assistant v1.0.0 released!
|
|
27
30
|
|
|
28
31
|
|
|
@@ -54,7 +57,7 @@ Download and install directly from the Release page:
|
|
|
54
57
|
|
|
55
58
|
```bash
|
|
56
59
|
# Install latest version (replace with your Release URL)
|
|
57
|
-
pip install
|
|
60
|
+
pip install sql-assistant
|
|
58
61
|
|
|
59
62
|
# Install with optional dependencies
|
|
60
63
|
pip install "sql-assistant[sqlserver,gemini,claude]"
|
|
@@ -143,6 +146,20 @@ Visit **http://localhost:5010** to start using!
|
|
|
143
146
|
- **Backup Management**: View backup list, get backup details, delete backup files
|
|
144
147
|
- **Data Recovery**: Restore table structure and data from backup files to current database
|
|
145
148
|
|
|
149
|
+
### 8. SQL Template/Favorite
|
|
150
|
+
|
|
151
|
+
- **Template Management**: Create, edit, delete SQL templates for frequently used queries
|
|
152
|
+
- **Tag-based Filtering**: Organize templates with tags for easy categorization
|
|
153
|
+
- **Quick Insert**: Insert templates directly into the query input box
|
|
154
|
+
- **Favorite Marking**: Mark frequently used SQL statements as favorites
|
|
155
|
+
|
|
156
|
+
### 9. Execution Plan Analysis
|
|
157
|
+
|
|
158
|
+
- **Visual Execution Plan**: View graphical execution plan for SELECT statements
|
|
159
|
+
- **Cost Analysis**: Analyze query cost and performance metrics
|
|
160
|
+
- **Optimization Suggestions**: Get AI-powered optimization recommendations
|
|
161
|
+
- **Index Utilization**: Check index usage and identify missing indexes
|
|
162
|
+
|
|
146
163
|
|
|
147
164
|
## <a id="system-architecture"></a> 🏗️ System Architecture
|
|
148
165
|
|
|
@@ -418,6 +435,9 @@ Visit **http://localhost:5010/docs** after starting the service to view Swagger
|
|
|
418
435
|
| `/api/backup/list` | GET | Get backup list |
|
|
419
436
|
| `/api/backup/{backup_id}` | GET/DELETE | Get backup details / Delete backup |
|
|
420
437
|
| `/api/backup/restore` | POST | Restore database from backup |
|
|
438
|
+
| `/api/templates` | GET/POST | Get template list / Create new template |
|
|
439
|
+
| `/api/templates/{id}` | GET/PUT/DELETE | Get/update/delete template |
|
|
440
|
+
| `/api/explain` | POST | Analyze SQL execution plan |
|
|
421
441
|
|
|
422
442
|
|
|
423
443
|
## ⚠️ Notes
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "sql-assistant"
|
|
3
|
+
version = "1.0.2"
|
|
4
|
+
description = "SQL Smart Assistant - Natural Language to SQL query tool supporting major databases and LLMs"
|
|
5
|
+
requires-python = ">=3.10"
|
|
6
|
+
authors = [
|
|
7
|
+
{ name = "fjz-hosts", email = "2931742378@qq.com" }
|
|
8
|
+
]
|
|
9
|
+
maintainers = [
|
|
10
|
+
{ name = "fjz-hosts", email = "2931742378@qq.com" }
|
|
11
|
+
]
|
|
12
|
+
keywords = ["sql", "llm", "natural-language", "database", "query", "assistant"]
|
|
13
|
+
classifiers = [
|
|
14
|
+
"Development Status :: 4 - Beta",
|
|
15
|
+
"Intended Audience :: Developers",
|
|
16
|
+
"License :: OSI Approved :: MIT License",
|
|
17
|
+
"Programming Language :: Python :: 3",
|
|
18
|
+
"Programming Language :: Python :: 3.10",
|
|
19
|
+
"Programming Language :: Python :: 3.11",
|
|
20
|
+
"Programming Language :: Python :: 3.12",
|
|
21
|
+
"Topic :: Database",
|
|
22
|
+
"Topic :: Scientific/Engineering :: Artificial Intelligence",
|
|
23
|
+
]
|
|
24
|
+
dependencies = [
|
|
25
|
+
"fastapi>=0.110.0",
|
|
26
|
+
"uvicorn[standard]>=0.29.0",
|
|
27
|
+
"jinja2>=3.1.0",
|
|
28
|
+
"pydantic>=2.0.0",
|
|
29
|
+
"python-multipart>=0.0.9",
|
|
30
|
+
"pyyaml>=6.0",
|
|
31
|
+
"httpx>=0.27.0",
|
|
32
|
+
"pymysql>=1.1.0",
|
|
33
|
+
"psycopg2-binary>=2.9.0",
|
|
34
|
+
"redis>=5.0.0",
|
|
35
|
+
"pymongo>=4.6.0",
|
|
36
|
+
"aiosqlite>=0.20.0",
|
|
37
|
+
]
|
|
38
|
+
|
|
39
|
+
[project.optional-dependencies]
|
|
40
|
+
sqlserver = ["pymssql>=2.3.0"]
|
|
41
|
+
gemini = ["google-generativeai>=0.8.0"]
|
|
42
|
+
claude = ["anthropic>=0.30.0"]
|
|
43
|
+
|
|
44
|
+
[build-system]
|
|
45
|
+
requires = ["hatchling"]
|
|
46
|
+
build-backend = "hatchling.build"
|
|
47
|
+
|
|
48
|
+
[tool.hatch.metadata]
|
|
49
|
+
readme = "README.md"
|
|
50
|
+
|
|
51
|
+
[tool.hatch.build.targets.wheel]
|
|
52
|
+
packages = ["src/sql_assistant"]
|
|
53
|
+
|
|
54
|
+
[project.scripts]
|
|
55
|
+
sql-assistant = "sql_assistant.main:main"
|
|
@@ -4,6 +4,7 @@ from ..config import get_config_manager
|
|
|
4
4
|
from ..llm.manager import get_llm_manager
|
|
5
5
|
from ..database.manager import get_db_manager
|
|
6
6
|
from ..database.history import get_history_manager
|
|
7
|
+
from ..database.templates import get_template_manager as get_db_template_manager
|
|
7
8
|
|
|
8
9
|
|
|
9
10
|
def get_config():
|
|
@@ -20,3 +21,7 @@ def get_db():
|
|
|
20
21
|
|
|
21
22
|
def get_history():
|
|
22
23
|
return get_history_manager()
|
|
24
|
+
|
|
25
|
+
|
|
26
|
+
def get_template_manager():
|
|
27
|
+
return get_db_template_manager()
|