项目介绍
SQLPage 是一个开源、快速、强大的专注于构建数据为中心的应用程序的SQL-only WBE 应用构建器。它旨在帮助数据科学家、分析师和商业智能团队快速构建功能强大的数据应用,而无需担心任何传统的Web编程语言和概念。

应用场景
-
数据可视化:通过简单的SQL查询,将数据库中的数据以文本、列表、网格、图表和表单的形式展示在网页上。 -
数据报表生成:自动生成数据报表,用于日常业务分析和决策支持。 -
快速原型开发:为数据驱动的应用程序提供快速原型开发环境,加速产品迭代和测试。 -
业务智能:为商业智能团队提供一个简单、直观的工具,用于构建数据分析和可视化应用。
功能模块
-
SQL查询执行:支持对多种数据库(如SQLite、PostgreSQL、MySQL、Microsoft SQL Server等)的SQL查询执行。 -
结果展示:将查询结果以多种形式(文本、列表、网格、图表、表单)展示在网页上。 -
自定义组件:允许用户创建自定义的Handlebars模板组件,以满足特定的展示需求。 -
配置管理:支持通过配置文件或环境变量进行配置,如数据库URL、监听端口等。 -
HTTPS支持:原生支持HTTP/2和HTTPS,自动请求并加密用户流量。 -
Serverless部署:支持将SQLPage编译为AWS Lambda函数,实现无服务器部署。
功能特点
-
简单易用:用户只需编写简单的SQL文件,无需掌握复杂的Web编程知识。 -
数据驱动:专注于数据处理和展示,帮助用户快速构建数据为中心的应用程序。 -
灵活性强:支持多种数据库和自定义组件,满足不同用户的需求。 -
安全性高:原生支持HTTPS,确保用户流量的安全性。 -
可扩展性好:支持Serverless部署,方便用户在各种云环境中运行SQLPage。
项目技术栈
-
后端:使用Rust语言编写,作为一个独立的可执行文件运行。 -
前端:使用纯JavaScript进行前端开发,提供简洁、直观的用户界面。 -
数据库:支持多种数据库,包括SQLite、PostgreSQL、MySQL、Microsoft SQL Server等。 -
模板引擎:使用Handlebars模板引擎,允许用户创建自定义的展示组件。 -
容器技术:提供Docker镜像,方便用户在各种环境中部署SQLPage。
功能演示
示例一:

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;
示例二:

SELECT
'chart' as component,
'Quarterly Revenue' as title,
'area' as type;
SELECT
quarter AS x,
SUM(revenue) AS y
FROM finances
GROUP BY quarter
示例三:

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;
示例四:

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