从文档化的sql代码生成应用程序构件

voxsql的Python项目详细描述


CircleCIMaintainabilityTest Coverage

voxsql

从记录的sql代码生成应用程序工件。

用例

此库的用例包括但不限于:

  • 自动生成人性化的sql摘录文档。
  • 自动生成应用程序级绑定(Learn more)。
  • 测试代码的检测,以将覆盖率分析扩展到sql摘录。

开始

pip install voxsql

基本概念

voxsql处理带注释的sql文件。注释是以类似javadoc的注释的形式提供的,库在分析文件时只考虑结构正确的sql段。下面是一个示例:

/** * Adds a contact to the database. * * @dialect postgresql * @name add_contact * @param contact_name: string - the target contact's name * @retmode record * @retval name: string */{insertintocontacts(name)values(%(contact_name)s)returningname;}

将上面的代码片段保存到sample.sql以运行下面的示例。

cli用法

要使用cli消化上面的sql文件:

voxsql sample.sql

有关详细信息,请运行voxsql --help

直接使用库

下面是一个例子,说明如何直接使用python库操作上面的文件:

fromvoxsqlimportparseframes=parse(open('sample.sql').read())assertframes[0].header.name=='add_contact'assertframes[0].body.source.startswith('insert into contacts')

设计目标和灵感

voxsql努力将sql提升为以应用程序为中心的项目中的一流语言。

与orms相反,voxsql不尝试将sql封装在更高级别的应用程序级抽象中,也不尝试重写或调整提供的sql以提高可移植性。这里的前提是直接编写和维护SQL代码具有一些有趣的优点,例如使用更高级的SQL特征的更低的障碍,更容易检查查询,以及减少应用程序占用和复杂性的可能性。假定^ {CD1}}以灵活性为代价促进简单性是合理的。

SQL繁重设计的一些常见缺点,如缺乏查询组合性、难以促进代码重用和缺乏跨引擎可移植性,并不是voxsql的重点,因此,它被认为不适合真正需要支持不可预知的复杂持久层的项目,这可能不像现在常识所认为的那样代表当前的现实。

以下是一些以稍微不同的方式促进SQL for应用程序开发的项目:

  • ^{}:为clojure生成基于dsl的sql绑定
  • ^{}:为clojure生成基于dsl的sql绑定
  • ^{}:灵感来自于python的Yesql

下面列出的参考资料对voxsql

中包含的思想产生了积极影响

贡献

这就是您在本地运行测试的方式:

make test.start.d
pytest

路线图

  • 通过新的@error标记自动处理异常。
  • 添加对@dialect sqlite
  • 的支持
  • 添加对@dialect mysql
  • 的支持
  • 添加对@dialect xyz:version
  • 的支持
  • 添加Sphinx文档
  • 添加cli命令,以便在预加载绑定的情况下清理解释器。

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

推荐PyPI第三方库


热门话题
java搜索具有外键的JPA实体的约定是什么?   java事务没有使用事务和嵌套方法的2个实例回滚   SpringBootJavaMessageFormat。使用umlauts格式(ä/ö/ü)   java如何通过字符串在sqlite中搜索列   JAVAlang.ClassNotFoundException:org。冬眠Hibernate4的例外情况   java消息正文在Gmail中被弄乱了   java Apache Ignite未使用空值更新缓存   Java正则表达式未捕获组   java onBackPressed();除非我叫super否则不行。onBackPressed();两次密码   java CustomAlertDialog在删除数据库记录后未完成其进程   C++中的迭代器(Stl)与java,是否存在概念上的区别?   Java在不知道字符编码的情况下将字节[]转换为字符串   来自本地WSDL文件的java Web服务客户端   java工具可用于在一个位置聚合所有项目相关信息   java在Netbeans中的maven项目中设置依赖项