在带注释的SQL文件中组织应用程序查询。

query-selector的Python项目详细描述


https://travis-ci.org/solidsnack/query-selector.svg?branch=master

查询选择器允许将一个充满sql查询的文件视为一个记录, 每个带注释的查询都有一个属性。这使得使用长的,特别的 SQL查询更加卫生,并且有助于轻松找到 询问。

QuerySelector构造函数接受字符串、文件句柄或 (<package>, <resource)配对并将sql解析为带注释的组 --@ <name> <mode><name>是任何与python兼容的名称;它将 成为对象的属性。<mode>只是元数据,可以 省略;它描述一个查询是否应该有一个、一个或多个 结果。

例如,这样的文件:

--@ t one
SELECTnow();

成为具有单个属性的对象t

>>> q.tQuery(args=[], mode=u'one', readonly=False, text=u'SELECT * FROM now();')

QuerySelector对象是iterable,在 查询最初出现在文件中的顺序。

>>> forname,qinqs:... print'%s: %s'%(name,q)t: Query(args=[], mode=u'one', readonly=True, text='SELECT now();')

查询约定

如果您有脚本task.py和sql文件task.sql,或者 packagepackage/module.py和一个sql文件package/module.sql,queryselector 为您提供快捷方式:

fromquery_selector.magicimportqueriesforqinqueries:printq

magic模块重写正常的模块加载机制 确定哪个脚本或模块正在导入它并定位相邻的sql 文件。这个魔术是在一个单独的模块,使它严格选择加入!

模式

模式可以是noneoneone?many之一。如果没有 指定,默认值为many。模式字符串后面还可以跟着 单个单词ro作为查询是只读的线索。

实际上,SELECT now()是一个只读查询。我们可以把它注释为 因此,生成的查询数据结构记录如下:

>>> QuerySelector("""
...   --@ t one ro
...   SELECT now();
... """).tQuery(args=[], mode=u'one', readonly=True, text=u'SELECT * FROM now();')

参数

query-selector识别%(...)s样式参数引用 在PythonDBI2.0中定义。说我们想通过一个时区 选择服务器时间时。我们可以添加AT TIME ZONE %(tz)s 我们的问题。此参数的存在存储在args字段中 分析结果的。(.args中的参数按以下顺序列出 他们第一次出现在查询中。)

>>> QuerySelector("""
...     --@ t one ro
...     SELECT now() AT TIME ZONE %(tz)s AS t;
... """).tQuery(args=[u'tz'], mode=u'one', readonly=True,
      text=u'SELECT now() AT TIME ZONE %(tz)s AS t;')

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

推荐PyPI第三方库


热门话题
java区块链表示   如何识别此Java框架中使用的加密技术?   java从outter jar加载一个包含所有组件的类   java如何在netty中序列化和反序列化HttpMessage或HttpContent?   java Hibernate在一定量的插入后生成负id   文件在FTP服务器上复制,而不是在java中移动   java如何在Android应用程序中使用静态对话框片段方法?   java扫描器while循环   java如何比较drools中数组列表的泛型元素?   java构建Restful服务失败CDI部署失败   java我的播放机将子弹射出90度   在Android设备中使用WiFi direct进行java数据传输   java在命令设计模式中将上下文传递给execute方法   java KeyClope TomcatAdapter:是否有“KeyClope”的替代路径。json'?   java如何将数据库中的名称放入我在另一个类中创建的JLIst中?   java Spring Mvc和MediaType for在获取rest请求的@RequestMapping中使用   java如何在应用程序运行时从包中打开文本文件?   java以Spring形式为单个对象定义POJO id   java清除gridview中的所有选定项