DSL旨在表示对b3j0f.crudity的请求。

j1bz.expression的Python项目详细描述


说明

expression是一种领域特定语言(dsl),用于表示crud查询。 对于b3j0f.crudityhttps://github.com/b3j0f/requester/

换言之,你可以写一些粗糙的表达

粗鲁的表情,酷!但是…这是什么?

此软件包的设计与 b3j0f.requester,所以在继续之前应该知道它是什么

b3j0f.requester中,所有内容都是ExpressionE)或 FunctionF)。如果要比较ab,则需要编写 :

>>>F('>',params=[E.a,E.b])

程序员可以毫无问题地操作这些嵌套的函数调用,但是 技术背景较低的人会发现做这件事有困难。 j1bz.expression旨在使b3j0f.requester调用更容易访问。这个 语法的灵感来自于sql,因为任何it人员都应该在 至少有几个SQL查询,不应丢失:

>>>interpret("SELECT ALL WHERE (a > b);")

语法比本机b3j0f.requester允许的更严格 待办事项(包括主要需求)。因此,用户被激励去写 有道理。

j1bz.expression.intepreter.interpret返回 b3j0f.requester.request.crud.{create.Create,read.Read,update.Update,delete.Delete} 序列化对象(取决于查询)。然后可以通过 任何司机。

安装

aptitude install git virtualenv

virtualenv venv
source venv/bin/activate

git clone https://github.com/b3j0f/requester

cd requester
python setup.py install

pip install j1bz.expression

expression-cli

如何

快速启动

>>>fromj1bz.expression.interpreterimportinterpret>>>res=interpret("SELECT a;")>>>print(repr(res))SELECTa

注释j1bz.expression.exceptions.ParseError应该是唯一的 在按原样调用解释函数时必须捕获异常

表达式示例

创建

INSERT VALUES k:v;
INSERT VALUES k1:v1, k2:v2;
INSERT INTO i VALUES k:v;
INSERT VALUES k:v; AS i

注释CREATEINSERT的同义词。意思是每次你能 使用INSERT您可以使用CREATE代替(在某些 案例)。

CREATE VALUES k:v;

读取

SELECT ALL;
SELECT s;
SELECT s WHERE w;
SELECT s GROUP BY g;
SELECT s ORDER BY o;
SELECT s LIMIT 10;
SELECT s; AS mys

SELECT s WHERE wh GROUP BY g ORDER BY o LIMIT 10; AS mys

SELECT a, b, c;
SELECT f();
SELECT f(a, b, c);

SELECT s WHERE (a);
SELECT s WHERE (a= b);
SELECT s WHERE (a != b);
SELECT s WHERE (a > b);
SELECT s WHERE (a >= b);
SELECT s WHERE (a < b);
SELECT s WHERE (a <= b);
SELECT s WHERE (a IN b);
SELECT s WHERE (a NIN b);
SELECT s WHERE (a LIKE b);

SELECT s WHERE (a AND b);
SELECT s WHERE (a OR b);
SELECT s WHERE (a OR (b AND c));

SELECT s ORDER BY o1, o2;
SELECT s ORDER BY o1 DESC, o2, o3 ASC;

注释READSELECT的同义词。

READ ALL;

更新

UPDATE VALUES k:v;
UPDATE VALUES k:v WHERE w;
UPDATE VALUES k:v; AS myu

UPDATE INTO u VALUES k:v;
UPDATE INTO u VALUES k:v WHERE w;
UPDATE INTO u VALUES k1:v1, k2:v2;

删除

DELETE d;
DELETE d1, d2, d3;
DELETE d WHERE w;
DELETE d1, d2, d3 WHERE w;
DELETE d; AS myd

note:表达式使用grako(https://pypi.python.org/pypi/grako)来 从中定义的语法生成语法分析器 {{ PACKAGE }}/etc/j1bz/expression/grammar.bnf你可以读这个bnf 检查所有可用可能性的说明。

高级操作

如果您想在代码中集成j1bz.expression,则不仅仅是为了 interpret()调用,这部分是给您的。

使用自定义语法

j1bz.expression供电的引擎是grako。格拉科(语法 Kompiler)在输入中获取一个bnf派生的语法文件,并在 python代码。

这个包嵌入了一个语法文件和一个从 这个语法({{ PACKAGE }}/etc/j1bz/expression/grammar.bnf

可以更改此语法并使用在运行时为 您的interpret()呼叫:

>>>interpret("SELECT a;","/PATH/TO/grammar.bnf")

note:第一次调用interpret()后(使用或 如果没有语法文件),则将使用第一次使用的同一解析器 后来(由于一个单身机修工)。

口译员vs口译

interpret()使用单例机制提供快捷方式

如果你想做更复杂的事情,你可以使用 j1bz.expression.interpreter.Interpreter

示例:

>>>i1=Interpreter(parser=mygrakoparser,walker=mycustomwalker)>>>i1.interpret("SELECT a;")>>>i2=Interpreter(pkwargs={'rule_name':'condition'})>>>i2.interpret("(a > b)")>>>i3=Interpreter(grammar_file='/PATH/TO/grammar.bnf')>>>i3.interpret("SELECT_ALIAS a;")

注意grammar_file参数只有在没有提供 通过parser参数自定义解析器。

异常处理

j1bz.expression.exceptions当前定义了两个异常:

  • ParserGenerationError:在中提供自定义语法时引发 命令生成语法分析器,但生成失败(语法不是 正确!).
  • ParseError:当给定给interpret()的表达式不是 可分解的。

其他一些E异常(IOErrorOSErrorFileNotFoundError)可以 如果语法文件是 不可读、不存在等

如果只使用interpret()快捷方式,则应处理 上述例外情况

如果您使用的是Interpreter类,则需要处理 ParserGenerationError(以及与文件相关的异常)当您实例化它时 当您进行interpret()调用时,ParseError

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
升级到windows 10后java Spring应用程序失败   java从研究出版物中提取摘要(.txt)   java JavaFX饼图未显示   java我设置了一个变量的值,但是当我使用get时,参数为null   java E优先级队列的预期操作时间   java MySQL左连接和组连接返回重复和中断数据   java新maven项目   java拆分MetaR/TAF   java随机。nextInt()正在返回相同的数字   BinaryOperator的java标识   java我想在ListView中没有项目时删除选项菜单(显示emptyView)?   java通过Sling通过AEM中的路径管理两个相同的servlet   命名查询中带“CONCAT”的java“SUBSTR”导致异常“SUBSTR”的参数计数无效?   java我正在尝试根据单元格值更改行颜色   java Hibernate在保存对象时生成mysql错误   java XmlSerializer。setProperty引发异常   java字符串和hashsetmembership匹配