SQLpage 是一个仅使用SQL的 Web 应用程序构建器。它旨在帮助数据科学家、分析师和商业智能团队快速构建强大的以数据为中心的应用程序,而无需担心任何传统的 Web 编程语言和概念。
使用 SQLPage,您可以编写简单的.sql
文件,其中包含对数据库的查询以选择、分组、更新、插入和删除数据,并且您可以获得以文本、列表、网格、绘图和表单形式显示数据的美观干净的网页。
代码 | 结果 |
选择 “列表”作为组件,“热门网站”作为标题;SELECT 名称作为标题, url 作为链接, 外壳类型 当 1 那么“蓝色” 其他“红色” END 作为颜色, 描述、图标、活动来自网站; | |
选择“图表”作为组件,“季度收入”作为标题,“区域”作为类型;SELECT 季度 AS x,SUM(收入) AS yFROM 财务组 按季度 | |
选择“表单”作为组件,“用户”作为标题,“创建新用户”作为验证;SELECT 名称、类型、占位符、 必需,描述FROM user_form;INSERT INTO userSELECT $first_name, $last_name, $birth_dateWHERE $first_name IS NOT NULL; | |
选择“选项卡”作为组件,true 作为中心;选择“显示所有卡片”作为标题,“?”作为链接, $tab 处于活动状态时为空;选择 格式('显示 %s 卡', 颜色) 作为标题, format('?tab=%s', color) 作为链接, $tab=color 作为活跃的 tab_example_cardsgroup 按颜色; 选择“卡”作为组件;选择 标题、描述、颜色 image_url 作为 top_image,链接来自 tab_example_cards,其中 $tab 为 null 或 $tab = color;选择 'text' 作为组件,sqlpage.read_file_as_text('footer.md') 作为contents_md |
SQLite,包括加载Spatialite等扩展的能力。
PostgreSQL 以及其他兼容数据库,例如YugabyteDB 、 CockroachDB和Aurora 。
MySQL,以及其他兼容的数据库,例如MariaDB和TiDB 。
Microsoft SQL Server 以及所有兼容的数据库和提供商,例如Azure SQL和Amazon RDS 。
阅读 SQLPage 网站上的官方入门指南。
最简单的开始方法是从版本页面下载最新版本。
下载与您的操作系统(linux、macos 或 windows)相对应的二进制文件。
解压缩: tar -xzf sqlpage-*.tgz
运行它: ./sqlpage.bin
要在服务器上运行,您可以使用 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 8080:8080 --volume "$(pwd)/source:/var/www" --volume "$(pwd)/configuration:/etc/sqlpage:ro" --rm lovasoa/sqlpage
例如,您可以使用:
将您的网站放置在名为source
的文件夹中,将sqlpage.json
放置在名为configuration
文件夹中。
如果您想构建自己的 docker 映像,则不建议以原始 sqlpage 映像作为基础,因为它非常精简,并且可能不包含您需要的依赖项。相反,您可以以 debian 作为基础,只需将 sqlpage 二进制文件从官方映像复制到您自己的映像:
来自 debian:stable-slimCOPY --from=lovasoa/sqlpage:main /usr/local/bin/sqlpage /usr/local/bin/sqlpage
我们仅提供针对 x86_64 架构的编译二进制文件,但提供其他架构的 docker 映像,包括 arm64 和 armv7。如果您想在 Raspberry Pi 或更便宜的 ARM 云实例上运行 SQLPage,使用 docker 映像是最简单的方法。
Mac OS 用户的另一种选择是使用 SQLPage 的自制程序包。
安装自制软件
在终端中,运行以下命令:
brew install sqlpage
SQLPage 是一个用 Rust 编写的 Web 服务器,并作为单个可执行文件分发。当它收到对以.sql
结尾的 URL 的请求时,它会找到相应的 SQL 文件,在数据库上运行它,并将来自 Web 请求的信息作为 SQL 语句参数传递给它。当数据库开始返回查询的行时,SQLPage 会将行中的每条信息映射到其预定义组件模板之一中的参数,并将结果流式传输回用户的浏览器。
TODO 列表:一个简单的待办事项列表应用程序,说明如何使用 SQLPage 创建基本的 CRUD 应用程序。
绘图、表格、表单和交互性:一个简短且评论良好的演示,展示了如何使用绘图、表格、表单和交互性来根据 URL 参数过滤数据。
微小的分裂克隆:共享费用跟踪应用程序
Corporate Conundrum:一款用 SQL 实现的棋盘游戏
主从表单:展示如何实现一组简单的表单以将数据插入具有一对多关系的数据库表中。
SQLPage自己的官方网站和文档:该项目官方网站的SQL源代码,https://sql.datapage.app
图片库:用户可以登录并上传图片的图片库。说明使用会话 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
中来创建自定义组件。例子。
SQLPage 原生且透明地支持 HTTP/2 和 HTTPS。只需设置SQLPAGE_HTTPS_DOMAIN=example.com
,SQLPage 将自动请求受信任的证书并开始用它加密所有用户的流量。您无需进行繁琐的手动配置,也无需为您的用户提供烦人的“连接不安全”消息!
您可以通过将 SQLpage 编译为 AWS Lambda 函数来运行无服务器 SQLpage。一个简单的方法是使用提供的 docker 镜像:
docker build -t sqlpage-lambda-builder 。 -f lambda.Dockerfile --目标构建器 docker run sqlpage-lambda-builder cat deploy.zip > sqlpage-aws-lambda.zip
然后,您只需将自己的 SQL 文件添加到sqlpage-aws-lambda.zip
,并将其上传到 AWS Lambda,选择Amazon Linux 2 上的自定义运行时作为运行时。
运行无服务器时,您可以将 SQL 文件直接包含在要部署的映像中。但是,如果您希望能够动态更新 sql 文件而不创建新映像,则可以将文件直接存储在数据库内,并存储在具有以下结构的表中:
创建表 sqlpage_files( 路径 VARCHAR(255) NOT NULL PRIMARY KEY, 内容BLOB, 最后修改的时间戳(默认当前时间戳);
确保每次更新文件内容时都更新last_modified
(或在 TRIGGER 内执行)。仅当文件被修改时,SQLPage 才会从数据库中重新解析文件。
actix web 以令人难以置信的速度处理 HTTP 请求,
tabler 负责处理具有专业外观的干净组件的样式,
tabler 图标是一大组图标,您可以直接从 SQL 中选择,
Handlebars 从每个组件的可读模板中呈现 HTML 页面。
为什么使用 SQL 而不是真正的编程语言? SQL 甚至不是图灵完备的!
你关注的是错误的问题。如果您可以声明式地表达您的应用程序,那么您就应该这样做——无论是使用 SQL 还是其他语言。声明性代码通常比命令性代码更简洁、可读、更容易推理、更容易调试。
SQL 比传统语言更简单,通常可供非程序员阅读,但功能非常强大。
如果复杂性是您的目标,请注意 SQL 实际上是图灵完备的。
即使没有递归查询,由用户交互驱动的一系列 SQL 语句(如 SQLPage)仍然是图灵完备的,使您能够构建一个像图灵机一样运行的 SQL 驱动的网站。
仅仅因为你可以并不意味着你应该......
——有人在 Reddit 上表现得很刻薄
这不是关于“应该”,而是关于“为什么不呢?”如果您愿意,可以继续在线条内着色,但我们将在这里享受我们的 SQL 网站的乐趣。
这与 Microsoft Access 相同吗?
目标相似——创建简单的以数据为中心的应用程序——但工具有很大不同:
SQLPage 是一个 Web 服务器,而不是桌面应用程序。
SQLPage 连接到现有的强大的关系数据库; 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 作为其前端部分。
查看我们的贡献指南,了解有关开发设置、测试和拉取请求流程的详细说明。