python-pyparsing,每个结果名称
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了python-pyparsing,每个结果名称,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1754字,纯文字阅读大概需要3分钟。
内容图文
![python-pyparsing,每个结果名称](/upload/InfoBanner/zyjiaocheng/693/bd39185840e4448293e2e7704dceddca.jpg)
我正在尝试使用pyparsing来构建一些not-quite-sql解析器(我没有from子句,没有任何联接,等等).我今天的工作一直基于pyparsing附带的simpleSQL.py示例脚本.我试图将“ GROUP BY”和“ ORDER BY”子句添加到解析器中,但是无论它们先出现在哪,都试图对其进行匹配.
我正在使用Each类,它似乎与它们匹配,但是它没有在Each类中设置结果名称.我不是在做正确的事情,或者是发生了一些我不清楚的事情.
同样,从simpleSQL.py示例中,我删除了fromToken,所以我的selectStmt现在看起来像:
# define the grammar
selectStmt << ( selectToken +
columnNameList.setResultsName('columns') +
Optional( CaselessKeyword('where') + whereExpression, "" ).setResultsName('where') +
Each( [ Optional( CaselessKeyword('group by') + columnNameList, "" ).setResultsName('group'),
Optional( CaselessKeyword('order by') + columnNameList, "" ).setResultsName('order') ] ) )
我得到结果:
SELECT a WHERE a=b and c = d GROUP BY c, e ORDER By d ->
tokens = ['select', ['a'], 'where', ['a', '=', 'b'], 'and', ['c', '=', 'd'], 'group by', ['c', 'e'], 'order by', ['d']]
SELECT a WHERE a=b and c =d ORDER BY z, y GROUP BY c ->
tokens = ['select', ['a'], 'where', ['a', '=', 'b'], 'and', ['c', '=', 'd'], 'order by', ['z', 'y'], 'group by', ['c']]
因此,看起来它正在按任一顺序解析group和order子句,但未分配结果名称(分别为“ order”和“ group”).我可以看到这完全是愚蠢的,我缺少了一些东西,或者我可以看到我打算以任何顺序查找那些子句(将来还会有更多子句,例如LIMIT)完全错误.
任何帮助将不胜感激!到目前为止,我喜欢pyparsing.
解决方法:
试一下:
Stmt << ( selectToken +
columnNameList('columns') +
Optional( CaselessKeyword('where') + whereExpression('where'), "" ) +
Each( [ Optional( CaselessKeyword('group by') + columnNameList('group'), "" ).setDebug(),
Optional( CaselessKeyword('order by') + columnNameList('order'), "" ).setDebug() ]
)
)
内容总结
以上是互联网集市为您收集整理的python-pyparsing,每个结果名称全部内容,希望文章能够帮你解决python-pyparsing,每个结果名称所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。