Excel 文件的小型 SQL 引擎,基于 Openpyxl
项目描述
pyxl-sql:一个用于 excel 的小型 SQL 引擎
pyxl-sql 是一个小型的 SQL 实现,用于 Excel 工作簿。
- 基于 Openpyxl for Excel 文件格式的读/写
- 适用于遵循具有唯一列标题的“表格”格式的 Excel 工作簿
- SQL 查询写在“Pyxl SQL”表中
- 使用 python 表达式
- 使用 Excel 公式,带有列名
- 通常用于例行地将多个 Excel 文件中的信息合并/连接到一个新文件中。
- 支持 SELECT INTO、UPDATE、FROM、AS、
pyxl-sql 可以用作命令行工具。在这种情况下,它会在目录中查找 Excel 文件并执行在“Pyxl SQL”表上找到的命令。命令行选项允许更改行为。
因此,命令行工具的执行可以通过 Excel 宏自动执行,例如附加到“按钮”
pyxl-sql 也可以作为python库使用
pyxl-sql 是带有 tox 和 cov 的测试。查看源代码树中的“测试”目录
pyxl-sql 已记录在案。查看源代码树中的“doc”目录
与标准 SQL 的区别:限制和补充
- SQL 语法不管理中间(虚拟)表,因此没有(还)命令的子命令(例如 SELECT INTO 应用于 SELECT)
- 仅管理一部分 SQL 命令
- 列名可以包含空格,并在用于表达式或公式时包含在 {} 中
- 默认情况下,表格(即 Excel 工作表)按照它们在命令中的出现编号,从 0 开始,因此语法 @1{FIELD NAME} 表示表格/工作表编号 1 中的“FIELD NAME”,即别名(“ AS") 是自动创建的
- SET 子句用于指定在 SELECT 命令(或等效命令)中创建的字段,其方式类似于 UPDATE 命令中的 SET 子句
- 在 SET 子句中,正确的成员不限于字段名称,它可以是任意 PYTHON 表达式,以 ':=' 开头,例如:
SET Priority = ':= "Major" if @0{Range} in ("High", "Medium") and #0{Potential 2021} > 100000 else "Minor"'
- 也接受以“=”开头的 Excel 公式,例如:
SET Mean = '=SUM(M2:Q2)/SUM(R2:V2)'
- SET 语法以 WHEN 子句递增,类似于 WHERE,但对每个 SET 子句单独执行。例如,以下子句将根据 KPI 行的值在“Basic 2019”或“Medium 2019”列中为列 2019 分配值,从而将行分段转换为行分段。
SET Basic 2019 = 2019 WHEN := @1{KPI} == "Basic"
SET Medium 2019 = 2019 WHEN := @1{KPI} == "Medium"
- AGGREGATES 子句允许将 python 表达式作为 MAX、MIN 等的概括...
- IMPORT 命令允许导入 python 模块
- FORMAT 命令为列指定 Excel 格式
- COMMENTS 命令引入注释
pyxl-sql 文件格式
pyxl-sql 假设:
- OpenPyxl 可以读取 excel 文件
- 表格被格式化为“表格”,即第一行(默认)是列标题
- 列标题都不同
- 一个文件包含将要执行的 pyxl-sql 命令和子句
- 关键字大写
在空工作表的情况下(由 pyxlsql 使用“SELECT INTO”完成),标题后的第一行可能包含“示例”,其中可以包含将为每一行复制的格式或公式。此示例行将被“SELECT INTO”删除参见“基本”示例
pyxl-sql 命令
pyxl-sql 命令和子句存储在一个特殊的工作表中(默认情况下为“Pyxl SQL”)命令存储在一行上命令由下一行后面的子句完成
命令分为几列:
- COMMAND:保存命令名称,例如“LEFT JOIN”,或关联子句的名称,例如“WHERE”
- 目标:保存目标工作表的名称(或列在 CLAUSES 的情况下)
- KEY:保存完成命令定义的关键字。例如“LEFT JOIN”总是由“FROM”完成
- 源:保存将分配给目标中每个元素的值。根据命令或子句,“源”可以是字段名称、Excel 公式、Python 表达式......
对于某些条款,在同一行上的第二组(条件、目标测试、比较、源测试)完成了定义
其余列用于 COMMENTS,可以是任意单元格,不进行解析
表描述符
工作表由它们的名称描述。例如
- 'USA commands':用于正在执行的文件中的工作表(即包含'Pyxl SQL'工作表)
- 'Northwind.xlsx[Orders Details]':用于不同 Excel 文件中的工作表
字段描述符
字段可以用以下语法表示:
- 仅“字段名称”,如果没有歧义
- '(@|#)N{field name}',如果有歧义。N是张数
- '(@|#)alias{field name} alias 是工作表的别名
在最后两个示例中:
- @ 表示一个字符串
- # 表示一个数字
这种类型指示简化了 n 个空单元格的管理,
因为 excel 在数字上下文中将空视为 0,在字符串上下文中将 "" 视为空,而 Python 将其视为无。因此“类型”指示允许将 None 转换为 0 或“”,这简化了表达式
例子
示例取自https://www.w3schools.com/sql/default.asp 并使用著名的 Northwind 示例数据库(V1 和 V2)
测试和示例
使用 tox 和 cov 进行测试。要运行测试,只需在根目录中运行 'tox'
(venv) PyxlSQL> tox
有关更多详细信息,请参阅源代码中的 tests/ 目录。
当前覆盖率为93%,大部分未覆盖的代码是防御性的
pyxl-sql 作为工具
pyxl-sql 也是一个命令行工具,带有命令行选项。了解更多信息:
pyxlsql.py --help
文档
使用 Sphinx https://www.sphinx-doc.org/构建文档
文档在https://fabien_battini.gitlab.io/pyxlsql/html/中生成
gitlab 存储库:https ://gitlab.com/fabien_battini/pyxlsql
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。
源分布
内置分布
open_pyxl_sql -0.11.0.tar.gz 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | cd724af8b8829757ba5dc8efc55039df584616126608a1c3bed9386aabe4f84e |
|
| MD5 | 9b8e60f6dba9c43403641eb31b48179f |
|
| 布莱克2-256 | b0ba300303598cb9c089bb5129d59da7e9a78c4d6a8167c7bb85c03ad59bcb3e |
open_pyxl_sql -0.11.0-py3-none-any.whl 的哈希值
| 算法 | 哈希摘要 | |
|---|---|---|
| SHA256 | fac0bdd3d192accf8503f2da7204f69920f869894f6702480e014c98315af750 |
|
| MD5 | 85b058b8faf1c8f18e3d4c5b3e6b3391 |
|
| 布莱克2-256 | e57f977f13ca4bd82d9833a06f1719aca4d640567971dd55351017df34756b30 |