Files
sqlpage--sqlpage/README.md
T
wehub-resource-sync e237273dc0
deploy website / deploy_official_site (push) Waiting to run
docs: make Chinese README the default
2026-07-13 10:21:12 +00:00

18 KiB
Raw Blame History

Note

本文档由 WeHub 基于上游 README 翻译整理,属于社区翻译,非官方中文文档。
English · 原始项目 · 上游 README
原作者、版权与许可证归属以原始项目及本仓库 LICENSE 文件为准。

SQLpage

一段简短视频,介绍 sqlpage 的概念

SQLPage 是一款纯 SQL Web 应用构建器。 它允许你通过将简单的数据库查询转换为交互式网站, 快速构建强大的以数据为中心的用户界面。

使用 SQLPage,你只需编写包含数据库查询的简单 .sql 文件, 用于查询、分组、更新、插入和删除数据,即可获得美观整洁的网页, 以文本、列表、网格、图表和表单等形式展示你的数据。

示例

代码结果
SELECT 
    'list' as component,
    'Popular websites' as title;
SELECT 
    name as title,
    url as link,
    CASE type
      WHEN 1 THEN 'blue'
      ELSE 'red'
    END as color,
    description, icon, active
FROM website;

SQLPage 列表组件

SELECT
  'chart' as component,
  'Quarterly Revenue' as title,
  'area' as type;

SELECT
    quarter AS x,
    SUM(revenue) AS y
FROM finances
GROUP BY quarter

SQLPage 列表组件

SELECT
    'form' as component,
    'User' as title,
    'Create new user' as validate;

SELECT
    name, type, placeholder,
    required, description
FROM user_form;

INSERT INTO user
SELECT $first_name, $last_name, $birth_date
WHERE $first_name IS NOT NULL;

SQLPage 列表组件

select 'tab' as component, true as center;
select 'Show all cards' as title, '?' as link,
  $tab is null as active;
select
  format('Show %s cards', color) as title,
  format('?tab=%s', color) as link,
  $tab=color as active
from tab_example_cards
group by color; 


select 'card' as component;
select
  title, description, color
  image_url as top_image, link
from tab_example_cards
where $tab is null or $tab = color;

select
  'text' as component,
  sqlpage.read_file_as_text('footer.md') as contents_md

卡片组件 SQL 示例

支持的数据库

快速开始

在 SQLPage 官网阅读官方快速开始指南.

使用可执行文件

最简单的入门方式是,从 发布页面. 下载最新版本。

  • 下载与你的操作系统(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 软件包.

ODBC 配置

SQLPage 支持 ODBC 连接,用于连接没有原生驱动的数据库。 如果你想使用内置数据库驱动(SQLite、PostgreSQL、MySQL、Microsoft SQL Server)之一,可以跳过本节。

Linux 和 MacOS 发布版二进制文件包含内置的静态链接 ODBC 驱动管理器(unixODBC)。 你仍需要安装或提供你要连接的数据库对应的 ODBC 驱动。

安装 ODBC 数据库驱动

  • DuckDB
    • 如果你使用 Docker,提供预装 DuckDB ODBC 驱动的 DuckDB 启用镜像变体
      • 使用 -duckdb 后缀:lovasoa/sqlpage:main-duckdblovasoa/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
  • 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 在 Replit 上的在线演示.,无需在电脑上安装任何东西即可在线试用所有示例。

配置

SQLPage 可通过放置在 sqlpage/sqlpage.json 中的配置文件 或环境变量(如 DATABASE_URLLISTEN_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 可从多个来源下载:

GitHub Downloads (all assets, all releases) Docker Pulls homebrew downloads Scoop Version Crates.io Total Downloads

贡献

我们欢迎贡献!SQLPage 使用 Rust 构建, 前端部分使用 vanilla javascript。

请查看我们的贡献指南,了解开发环境配置、测试和拉取请求流程的详细说明。

代码签名政策

我们的 Windows 二进制文件经过数字签名,因此 Windows 应能将其识别为安全。 免费代码签名由 SignPath.io, 提供,证书由 SignPath Foundation. Contributors, Owners.

除非用户或安装、操作人员明确请求,否则本程序不会将任何信息传输到其他联网系统