#web-framework #sql #build-web #sql-query #web #sql-database #web-interface

bin+lib sqlpage

完全使用 SQL 构建 数据用户界面。一个 Web 服务器,它接受 .sql 文件并使用预设的可配置的专业组件格式化查询结果。

40 个版本 (17 个重大变更)

新版本 0.27.0 2024 年 8 月 17 日
0.25.0 2024 年 7 月 13 日
0.20.1 2024 年 3 月 23 日
0.17.1 2023 年 12 月 10 日
0.4.4 2023 年 1 月 29 日

HTTP 服务器 中排名第 44

Download history 23/week @ 2024-05-02 168/week @ 2024-05-09 159/week @ 2024-05-16 161/week @ 2024-05-23 72/week @ 2024-05-30 174/week @ 2024-06-06 25/week @ 2024-06-13 145/week @ 2024-06-20 12/week @ 2024-06-27 39/week @ 2024-07-04 107/week @ 2024-07-11 7/week @ 2024-07-18 277/week @ 2024-07-25 141/week @ 2024-08-01 243/week @ 2024-08-08 154/week @ 2024-08-15

每月下载量 815

MIT 许可证

365KB
8K SLoC

Rust 6.5K SLoC // 0.0% comments Handlebars 1.5K SLoC // 0.0% comments JavaScript 395 SLoC // 0.0% comments SQL 25 SLoC // 0.3% comments

SQLpage

A short video explaining the concept of sqlpage

SQLpage 是一个仅使用 SQL 的 Web 应用程序构建器。它旨在帮助数据科学家、分析师和商业智能团队快速构建强大的以数据为中心的应用程序,无需担心传统的 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 list component

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 list component

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 list component

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

card component sql example

支持的数据库

  • SQLite,包括加载扩展程序如 Spatialite 的能力。
  • PostgreSQL 以及其他兼容数据库如 YugabyteDBCockroachDBAurora
  • MySQL 以及其他兼容数据库如 MariaDBTiDB
  • Microsoft SQL Server 以及所有兼容数据库和提供程序如 Azure SQLAmazon RDS

入门

阅读 SQLPage 网站上的官方 入门 指南.

使用可执行文件

入门的最简单方法是下载 发行页面 上的最新版本。

  • 下载适用于您的操作系统的二进制文件(linux、macos 或 windows)。
  • 解压缩它: tar -xzf sqlpage-*.tgz
  • 运行它: ./sqlpage.bin

使用 Docker

在服务器上运行,您可以使用 Docker 镜像

  • 安装 Docker
  • 在终端中,运行以下命令
    • docker run---名称 sqlpage-p8080:8080 --"$(pwd):/var/www" --rm lovasoa/sqlpage
    • ("$(pwd):/var/www" 允许 sqlpage 从您的当前工作目录运行 sql 文件)
  • 创建一个名为 index.sql 的文件,内容来自 此示例
  • 在浏览器中打开 https://127.0.0.1:8080
  • 可选地,您还可以将包含 sqlpage 的配置文件、自定义组件和迁移的目录挂载到容器中的 /etc/sqlpage(见 configuration.md
    • 例如,您可以使用
      • docker run---名称 sqlpage-p8080:8080 --"$(pwd)/source:/var/www" --"$(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 架构的编译二进制文件,但提供其他架构的 Docker 镜像,包括 arm64 和 armv7。如果您想在 Raspberry Pi 或更便宜的 ARM 云实例上运行 SQLPage,使用 Docker 镜像是最简单的方法。

在 Mac OS 上,使用 homebrew

对于 Mac OS 用户,可以使用 SQLPage 的 homebrew 软件包 作为替代。

工作原理

architecture diagram

SQLPage 是一个用 Web 服务器 写成的 Rust 语言,并以单个可执行文件形式分发。当它收到一个以 .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将自动请求受信任的证书,并使用它加密所有用户的流量。您无需进行繁琐的手动配置,您的用户也不会收到“连接不安全”的消息!

无服务器

您可以将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,选择作为运行时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。SQLPage只有在文件被修改时才会重新解析数据库中的文件。

使用的技术和库

  • actix web以惊人的速度处理HTTP请求,
  • tabler处理专业外观的整洁组件的样式,
  • tabler icons是一组您可以直接从SQL中选择的大图标,
  • handlebars从可读模板渲染每个组件的HTML页面。

常见问题

为什么我想用SQL而不是真正的编程语言编写代码?SQL甚至不是图灵完备

  • 您可能担心的是错误的事情。如果您可以用纯声明方式表达您的应用程序,您应该这样做,即使您正在使用传统的编程语言。这将比您能编写的任何命令式代码更简洁、更易读、更容易推理和调试。
  • SQL比传统的编程语言简单得多。它往往甚至可以被非程序员阅读,同时它又非常强大。
  • 如果您真的想让您的网站比必需的更复杂,请注意,SQL实际上确实是图灵完备的
  • 即使它不是(如果它没有递归查询),由用户驱动的SQL语句执行序列,就像SQLPage允许您做到的那样,仍然会是图灵完备的。您可以在代表图灵机的SQL网站上构建一个sql网站,用户需要反复点击“下一步”来计算机器的下一个状态。

仅仅因为您能做,并不意味着您应该...

—— 在Reddit上有人无礼

生命太短暂了,不能总是求稳。求稳有什么乐趣?我认为SQLPage有一些真正的价值可以提供,尽管其方法非常不寻常!SQLPage并不是旨在取代传统的Web开发框架或阻止其使用。相反,它迎合了一组想要利用他们的SQL技能快速构建Web应用程序的人,而无需花费数月时间学习所有传统Web开发中的技术,然后再用数周时间使用它们来构建一个简单的CRUD应用程序。

这是否与Microsoft Access相同?

目标是相同的:使创建简单的以数据为中心的应用程序变得简单。但工具非常不同

这个名称是不是指的是Microsoft Frontpage?

Frontpage是90年代末流行的视觉静态网站建设软件。在我被问及这个问题之前,我从未听说过它。

我喜欢CSS,我想设计网站,而不是写SQL。

你是人类吗? 人类讨厌CSS

SQLPage的看法是,在你有一个可工作的原型之前,不要浪费时间设计按钮的边框半径。我们提供了一组开箱即用的组件,这样你就可以专注于你的数据模型。

然而,如果你真的想自己编写HTML和CSS,你可以通过创建自己的组件来实现。只需在 sqlpage/templates 中创建一个 .handlebars 文件,并在其中编写你的HTML和CSS。(示例

下载

SQLPage可以从多个来源下载。

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

依赖项

~81MB
~1.5M SLoC