18 KiB
Note
本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。
English · 原始项目 · 上游 README
原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。
SQLpage
SQLPage 是一款纯 SQL Web 应用构建器。 它允许你通过将简单的数据库查询转换为交互式网站, 快速构建强大的以数据为中心的用户界面。
使用 SQLPage,你只需编写包含数据库查询的简单 .sql 文件,
用于查询、分组、更新、插入和删除数据,即可获得美观整洁的网页,
以文本、列表、网格、图表和表单等形式展示你的数据。
示例
| 代码 | 结果 |
| |
| |
| |
|
支持的数据库
- SQLite,,包括加载扩展(如 Spatialite)的能力(参见 load extensions)。
- PostgreSQL, 及其他兼容数据库,如 YugabyteDB、CockroachDB 和 Aurora。
- MySQL, 及其他兼容数据库,如 MariaDB 和 TiDB。
- Microsoft SQL Server, 及所有兼容的数据库和提供商,如 Azure SQL 和 Amazon RDS。
- 任何兼容 ODBC 的数据库,例如 ClickHouse, MongoDB, DuckDB, Oracle, Snowflake, BigQuery, IBM DB2,,以及通过各自 ODBC 驱动连接的其他许多数据库。
快速开始
使用可执行文件
最简单的入门方式是,从 发布页面. 下载最新版本。
- 下载与你的操作系统(linux、macos 或 windows)对应的二进制文件。
- 解压:
tar -xzf sqlpage-*.tgz - 运行:
./sqlpage.bin
使用 Docker
若要在服务器上运行,可以使用 Docker 镜像:
- 安装 Docker
- 在终端中运行以下命令:
docker run -it --name sqlpage -p 8080:8080 --volume "$(pwd):/var/www" --rm lovasoa/sqlpage- (
"$(pwd):/var/www"允许 sqlpage 从你当前工作目录运行 sql 文件)
- 创建一个名为 index.sql 的文件,内容来自此示例
- 在浏览器中打开 https://localhost:8080
- 你也可以选择挂载一个包含 sqlpage 配置文件、
自定义组件和迁移的目录
(参见 configuration.md)到容器中的
/etc/sqlpage。- 例如,你可以使用:
docker run -it --name sqlpage -p 80:8080 --volume "$(pwd)/source:/var/www" --volume "$(pwd)/configuration:/etc/sqlpage:ro" --rm lovasoa/sqlpage
- 并将你的网站放在名为
source的文件夹中,将sqlpage.json放在名为configuration的文件夹中。
- 例如,你可以使用:
- 如果你想构建自己的 Docker 镜像,不建议以原始 sqlpage 镜像为基础,因为它被极度精简,可能不包含你所需的依赖。相反,你可以以 debian 为基础,并将官方镜像中的 sqlpage 二进制文件复制到你自己的镜像中:
-
FROM debian:stable-slim COPY --from=lovasoa/sqlpage:main /usr/local/bin/sqlpage /usr/local/bin/sqlpage
-
我们仅为 x86_64 架构提供编译好的二进制文件,但为其他架构(包括 arm64 和 armv7)提供 Docker 镜像。如果你想在树莓派或 更便宜的 ARM 云实例上运行 SQLPage,使用 Docker 镜像是最简单的方式。
在 Mac OS 上使用 Homebrew
Mac OS 用户的另一种选择是使用 SQLPage 的 Homebrew 软件包.
- 安装 Homebrew
- 在终端中运行以下命令:
brew install sqlpage
ODBC 配置
SQLPage 支持 ODBC 连接,用于连接没有原生驱动的数据库。 如果你想使用内置数据库驱动(SQLite、PostgreSQL、MySQL、Microsoft SQL Server)之一,可以跳过本节。
Linux 和 MacOS 发布版二进制文件包含内置的静态链接 ODBC 驱动管理器(unixODBC)。 你仍需要安装或提供你要连接的数据库对应的 ODBC 驱动。
安装 ODBC 数据库驱动
- DuckDB
- 如果你使用 Docker,提供预装 DuckDB ODBC 驱动的 DuckDB 启用镜像变体
- 使用
-duckdb后缀:lovasoa/sqlpage:main-duckdb或lovasoa/sqlpage:latest-duckdb - 预配置为连接容器内
/var/lib/sqlpage/duckdb.db处的 DuckDB - 要自定义连接选项,,请设置
DATABASE_URL:docker run -e DATABASE_URL="Driver=DuckDB;Database=/path/to/your.db" -p 8080:8080 lovasoa/sqlpage:main-duckdb
- 要持久化 DuckDB 数据库,请挂载卷:
docker run -v ./data:/var/lib/sqlpage lovasoa/sqlpage:main-duckdb
- 使用
- 如果你使用 Docker,提供预装 DuckDB ODBC 驱动的 DuckDB 启用镜像变体
- Snowflake
- BigQuery
- 对于其他数据库,请遵循数据库官方的 ODBC 安装说明。
连接到你的数据库
- 查找你的连接字符串.
- 它看起来会像这样:
Driver=/opt/snowflake_odbc/lib/libSnowflake.so;Server=xyz.snowflakecomputing.com;Database=MY_DB;Schema=PUBLIC;UID=my_user;PWD=my_password - 它必须引用你之前安装的数据库驱动路径,以及驱动本身所需的任何连接参数。请遵循驱动自身文档中的说明。
- 它看起来会像这样:
- 在 DATABASE_URL 配置选项 中使用它
工作原理
SQLPage 是一个用
rust
编写的Web 服务器,
并以单个可执行文件的形式分发。
当它收到以 .sql 结尾的 URL 请求时,会找到对应的
SQL 文件,在数据库上执行,
并将 Web 请求中的信息作为 SQL 语句参数传入。
当数据库开始为查询返回行时,
SQLPage 将行中的每条信息映射到
其预定义组件模板中的一个参数,并将结果流式传输回
用户的浏览器。
示例
- 待办清单:一个简单的待办清单应用,演示如何使用 SQLPage 创建基本的 CRUD 应用。
- 图表、表格、表单与交互:一个简短且注释充分的演示,展示如何使用图表、表格、表单和交互功能,根据 URL 参数筛选数据。
- 迷你 Splitwise 克隆版:一个共享费用追踪应用
- Corporate Conundrum:用 SQL 实现的棋盘游戏
- 主从表单:展示如何实现一组简单表单,向具有一对多关系的数据库表插入数据。
- SQLPage 官方站点与文档:项目官方站点的 SQL 源代码,https://sql-page.com
- 图片库:用户可登录并上传图片的图片库。演示如何使用会话 Cookie 实现用户认证系统,以及如何处理文件上传。
- 用户管理:包含用户注册、登录、登出和保密页面的认证演示。使用 PostgreSQL。
- 构建 JSON API 并在前端集成 React 组件:展示如何在 SQLPage 网站中集成 React 组件,以及如何轻松用 SQLPage 构建 REST API。
- 处理文件上传:已认证用户可通过上传表单发布新图片的图片库。
- 从 CSV 文件批量导入数据 :一个简单的表单,让用户导入 CSV 文件以填充数据库表。
- 使用 PostgreSQL 存储过程的高级认证示例
- 基于 SQLite 的复杂 Web 应用,包含用户管理、文件上传、图表、地图、表格、菜单等
- 单点登录:演示如何在 SQLPage 中实现 OAuth 和 OpenID Connect(OIDC)认证。该演示还包含 CAS(Central Authentication Service)客户端。
- 深色主题 :演示如何让用户在浅色主题和深色主题之间切换,并保存用户偏好。
你可以使用 SQLPage 在 Replit 上的在线演示.,无需在电脑上安装任何东西即可在线试用所有示例。
配置
SQLPage 可通过放置在 sqlpage/sqlpage.json 中的配置文件
或环境变量(如 DATABASE_URL 或 LISTEN_ON)进行配置。
更多信息,请阅读 configuration.md。
此外,可以通过将 .handlebars
文件放在 sqlpage/templates 中来创建自定义组件。示例。
HTTPS
SQLPage 原生且透明地支持 HTTP/2 和 HTTPS。
只需设置 SQLPAGE_HTTPS_DOMAIN=example.com,SQLPage
就会自动申请受信任的证书,
并用它加密所有用户的流量。
你无需繁琐的手动配置,
用户也不会看到烦人的“连接不安全”提示!
无服务器(Serverless)
你可以将 SQLpage 无服务器 方式运行, 方法是将其编译为 AWS Lambda 函数. 一种简单的方式是使用提供的 Docker 镜像:
docker build -t sqlpage-lambda-builder . -f lambda.Dockerfile --target builder
docker run sqlpage-lambda-builder cat deploy.zip > sqlpage-aws-lambda.zip
然后只需将你自己的 SQL 文件添加到 sqlpage-aws-lambda.zip,
并将其上传到 AWS Lambda,,
运行时选择 Custom runtime on Amazon Linux 2。
将 SQL 文件直接存放在数据库中
在无服务器模式下运行时,你可以将 SQL 文件直接包含在要部署的镜像中。 但如果你想在不创建新镜像的情况下动态更新 sql 文件, 可以将文件直接存储在数据库中,存放在具有以下结构的表中:
CREATE TABLE sqlpage_files(
path VARCHAR(255) NOT NULL PRIMARY KEY,
contents BLOB,
last_modified TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
每次更新文件内容时,请务必更新 last_modified(或在 TRIGGER 中完成此操作)。
SQLPage 仅在文件被修改后才会从数据库重新解析该文件。
使用的技术与库
- actix web 以惊人的速度处理 HTTP 请求,
- tabler 为专业、整洁的组件提供样式,
- tabler icons 是一套庞大的图标集,你可以直接在 SQL 中选择,
- handlebars 从每个组件的可读模板渲染 HTML 页面。
常见问题
为什么要用 SQL 而不是真正的编程语言?SQL 甚至不是图灵完备! 的!**
- 你关注错了问题。如果你能声明式地表达应用逻辑,就应该这样做——无论使用 SQL 还是其他语言。声明式代码通常比命令式代码更简洁、可读、易于推理和调试。
- SQL 比传统语言更简单,非程序员往往也能读懂,同时又非常强大。
- 如果你的目标是复杂性,请注意 SQL 实际上是图灵完备的.
- 即使没有递归查询,由用户交互驱动的一系列 SQL 语句(如 SQLPage)仍然是图灵完备的,使你能够构建作为图灵机运行的 SQL 驱动网站。
能做不代表应该做……
— Reddit 上某个刻薄的人
这不是“应不应该”的问题——而是“为什么不呢?” 你想守规矩就继续待在框里涂色吧,我们会在旁边用 SQL 网站玩得很开心。
这和 Microsoft Access 一样吗?
目标相似——创建简单的以数据为中心的应用——但工具差异很大:
- SQLPage 是 Web 服务器,不是桌面应用。
- SQLPage 连接现有的强大关系型数据库;Access 试图成为数据库。
- Access 昂贵且专有;SQLPage 是开源的。
- SQLPage 让你免于 Visual Basic for Applications. 的折磨。
这个名字是在致敬 Microsoft FrontPage 吗?
FrontPage 是 90 年代末流行的可视化静态网站构建器。直到有人问我之前,我都没听说过它。
我喜欢 CSS。我想设计网站,而不是写 SQL。
如果你想编写自己的 HTML 和 CSS,
可以创建自定义组件,
在 sqlpage/templates 中添加 .handlebars 文件,并在其中编写 HTML 和 CSS。(示例)。
你也可以使用 html 组件编写原始 HTML,或使用 shell 组件引入自定义脚本和样式。
但 SQLPage 认为,在你拥有可运行的原型之前,不必为按钮圆角操心。 我们开箱即提供美观的组件,让你专注于数据模型,并快速迭代。
下载
SQLPage 可从多个来源下载:
贡献
我们欢迎贡献!SQLPage 使用 Rust 构建, 前端部分使用 vanilla javascript。
请查看我们的贡献指南,了解开发环境配置、测试和拉取请求流程的详细说明。
代码签名政策
我们的 Windows 二进制文件经过数字签名,因此 Windows 应能将其识别为安全。 免费代码签名由 SignPath.io, 提供,证书由 SignPath Foundation. Contributors, Owners.
除非用户或安装、操作人员明确请求,否则本程序不会将任何信息传输到其他联网系统





