来源:AI开发日志公众号专辑「Build Your Own X With AI」
原文链接:https://mp.weixin.qq.com/s?__biz=MzUxMjg3MjE2OA==&mid=2247486295&idx=1&sn=ea784e13ea069472283b981a685521f1&chksm=f95c90d0ce2b19c699f5d4eafb8268a5e5e83d14f60fe0f12c1c1ff54063f6316bb10ca1c088#rd

Simple SQL Database

一个用 Python 实现的轻量级 SQL 数据库系统,支持基本的关系数据库功能。

截图

功能特性

✅ 表的创建和删除 (CREATE TABLE, DROP TABLE)

✅ 数据的增删改查 (INSERT, SELECT, UPDATE, DELETE)

✅ WHERE 子句条件过滤

✅ ORDER BY 排序

✅ 主键约束

✅ 数据持久化 (JSON 格式)

✅ 类型支持: INTEGER, TEXT, REAL

✅ 完整的错误处理

✅ 属性测试覆盖 (使用 Hypothesis)

安装

克隆仓库

git clone https://github.com/build-your-own-x-with-ai/Simple-SQL-Database

cd Simple-SQL-Database

创建虚拟环境

python3 -m venv venv

source venv/bin/activate  # Linux/Mac

或 venv\Scripts\activate  # Windows

安装依赖

pip install -r requirements.txt

使用方法

交互式 REPL

python -m simple_sql_db.repl

编程接口

from simple_sql_db.database import Database

创建数据库实例

db = Database(data_dir=”my_data”)

创建表

result = db.execute_sql(“””

CREATE TABLE users (

id INTEGER,

name TEXT,

age INTEGER,

PRIMARY KEY(id)

)

”””)

插入数据

db.execute_sql(“INSERT INTO users (id, name, age) VALUES (1, ‘Alice’, 30)”)

db.execute_sql(“INSERT INTO users (id, name, age) VALUES (2, ‘Bob’, 25)”)

查询数据

result = db.execute_sql(“SELECT * FROM users WHERE age > 26”)

for row in result.rows:

print(row)

更新数据

db.execute_sql(“UPDATE users SET age=31 WHERE name=’Alice’”)

删除数据

db.execute_sql(“DELETE FROM users WHERE name=’Bob’”)

删除表

db.execute_sql(“DROP TABLE users”)

关闭数据库

db.close()

支持的 SQL 语法

CREATE TABLE

CREATETABLE table_name (

column1 TYPE,

column2 TYPE,

PRIMARY KEY(column1)

)

INSERT

INSERTINTO table_name (col1, col2) VALUES (val1, val2)

SELECT

SELECT col1, col2 FROM table_name

SELECT*FROM table_name WHERE col1 >10

SELECT*FROM table_name ORDERBY col1

SELECT*FROM table_name WHERE col1 =’value’ORDERBY col2

UPDATE

UPDATE table_name SET col1=val1, col2=val2

UPDATE table_name SET col1=val1 WHERE col2 >10

DELETE

DELETEFROM table_name

DELETEFROM table_name WHERE col1 =’value’

DROP TABLE

DROPTABLE table_name

运行测试

运行所有测试

pytest tests/ -v

运行属性测试

pytest tests/test_properties.py -v

运行单元测试

pytest tests/test_unit.py -v

架构设计

系统采用分层架构:

┌─────────────────────────────────┐

│      SQL Interface Layer        │  ← 用户交互接口

├─────────────────────────────────┤

│         Parser Layer            │  ← SQL 解析

├─────────────────────────────────┤

│        Executor Layer           │  ← 查询执行

├─────────────────────────────────┤

│     Table Manager Layer         │  ← 表和数据管理

├─────────────────────────────────┤

│      Storage Engine Layer       │  ← 持久化存储

└─────────────────────────────────┘

核心组件

SQLParser

将 SQL 文本解析为抽象语法树 (AST)

QueryExecutor

执行解析后的 SQL 命令

TableManager

管理表结构和数据

StorageEngine

处理数据的持久化和加载

数据存储

数据以 JSON 格式存储在磁盘上,每个表对应一个 JSON 文件:

{

“name”:”users”,

“schema”:{

“columns”:[

{“name”:”id”,”type”:”INTEGER”,”is_primary_key”:true},

{“name”:”name”,”type”:”TEXT”,”is_primary_key”:false}

]

},

“rows”:[

{“id”:1,”name”:”Alice”},

{“id”:2,”name”:”Bob”}

]

}

限制

单线程,不支持并发访问

无索引优化(全表扫描)

无查询优化器

适用于小型数据库(< 10,000 行/表)

WHERE 子句仅支持单个条件

许可证

MIT License

image-1