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
每月下载量 815 次
365KB
8K SLoC
SQLpage
SQLpage 是一个仅使用 SQL 的 Web 应用程序构建器。它旨在帮助数据科学家、分析师和商业智能团队快速构建强大的以数据为中心的应用程序,无需担心传统的 Web 编程语言和概念。
使用 SQLPage,您编写简单的 .sql
文件,其中包含对数据库的查询以选择、分组、更新、插入和删除数据,然后您将获得美观的干净网页,以文本、列表、表格、图形和表单的形式显示您的数据。
示例
代码 | 结果 |
| |
| |
| |
|
支持的数据库
- SQLite,包括加载扩展程序如 Spatialite 的能力。
- PostgreSQL 以及其他兼容数据库如 YugabyteDB、CockroachDB 和 Aurora。
- MySQL 以及其他兼容数据库如 MariaDB 和 TiDB。
- Microsoft SQL Server 以及所有兼容数据库和提供程序如 Azure SQL 和 Amazon RDS。
入门
使用可执行文件
入门的最简单方法是下载 发行页面 上的最新版本。
- 下载适用于您的操作系统的二进制文件(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 软件包 作为替代。
- 安装 homebrew
- 在终端中,运行以下命令
brewinstall sqlpage
工作原理
SQLPage 是一个用 Web 服务器 写成的 Rust 语言,并以单个可执行文件形式分发。当它收到一个以 .sql
结尾的 URL 请求时,它会找到相应的 SQL 文件,在数据库上运行它,将来自 Web 请求的信息作为 SQL 语句参数传递。当数据库开始返回查询的行时,SQLPage 将行中的每条信息映射到其预定义组件模板中的一个参数,并将结果流式传输回用户的浏览器。
示例
- 待办事项列表:一个简单的待办事项列表应用程序,说明如何使用 SQLPage 创建基本的 CRUD 应用程序。
- 图表、表格、表单和交互性:一个简短的带注释的演示,说明如何使用图表、表格、表单和交互性根据 URL 参数过滤数据。
- Tiny splitwise 克隆:一个共享支出跟踪应用程序
- 企业难题:一个用 SQL 实现的桌面游戏
- 主-详细信息表单:展示了如何实现一组简单的表单,以便将数据插入具有一对多关系的数据库表。
- SQLPage的官方网站和文档:项目官方网站的SQL源代码,https://sql.ophir.dev
- 图片画廊:用户可以登录并上传图片的图片画廊。展示了使用会话cookie实现用户身份验证系统以及处理文件上传的实现。
- 用户管理:一个具有用户注册、登录、登出和保密页面的身份验证示例。使用PostgreSQL。
- 制作JSON API并在前端集成React组件:展示了如何在SQLPage网站上集成React组件,以及如何使用SQLPage轻松构建REST API。
- 处理文件上传:认证用户可以通过上传表单发布新图片的图片画廊。
- 从CSV文件批量导入数据:一个简单的表单,允许用户导入CSV文件以填充数据库表。
- 使用PostgreSQL存储过程的高级身份验证示例
- SQLite中的复杂Web应用程序,具有用户管理、文件上传、图表、地图、表格、菜单等...
- 单点登录:展示了如何在SQLPage中实现OAuth和OpenID Connect (OIDC)身份验证的示例。该演示还包括一个CAS(中央认证服务)客户端。
- 暗色主题:演示了如何让用户在浅色主题和暗色主题之间切换,并存储用户偏好。
您可以通过使用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将自动请求受信任的证书,并使用它加密所有用户的流量。您无需进行繁琐的手动配置,您的用户也不会收到“连接不安全”的消息!
无服务器
您可以将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相同?
目标是相同的:使创建简单的以数据为中心的应用程序变得简单。但工具非常不同
- SQLPage是一个Web服务器,而不是桌面应用程序。
- SQLPage不是一个数据库,它连接到真正的经过实战考验的数据库。Microsoft Access试图成为一个数据库,但它在这方面做得并不好。
- Microsoft Access是昂贵的专有软件,SQLPage是开源的。
- Microsoft Access 是一个僵尸,它会从背后刺您,SQLPage则不会。
- SQLPage不会让您忍受Visual Basic for Applications。
这个名称是不是指的是Microsoft Frontpage?
Frontpage是90年代末流行的视觉静态网站建设软件。在我被问及这个问题之前,我从未听说过它。
我喜欢CSS,我想设计网站,而不是写SQL。
你是人类吗? 人类讨厌CSS。
SQLPage的看法是,在你有一个可工作的原型之前,不要浪费时间设计按钮的边框半径。我们提供了一组开箱即用的组件,这样你就可以专注于你的数据模型。
然而,如果你真的想自己编写HTML和CSS,你可以通过创建自己的组件来实现。只需在 sqlpage/templates
中创建一个 .handlebars
文件,并在其中编写你的HTML和CSS。(示例)
下载
SQLPage可以从多个来源下载。
依赖项
~81MB
~1.5M SLoC