此包有助于自动分析和执行SQL查询

sqlparser的Python项目详细描述


我们将有很多次需要通过python代码运行sql查询。这通常是通过将sql作为字符串复制到python代码中并使用jaydebapi执行来实现的。这工作得很好,但是如果我们编辑sql文件,然后将它们复制到python中,特别是如果我们将查询的实际开发外包给另一个团队,那么版本控制就很麻烦。

sqlparser是一个python包,它包装jaydebeapi,通过基于在开发查询时添加的一些简单注释自动解析sql查询来解决这个问题。

目前只对teradata进行了测试,但它应该可以与jaydebeapi支持的任何数据库一起工作。

SQL注释

可以使用以下注释创建三种类型的SQL“块”: --:--设置 这些查询首先运行,可能会创建一些中间表。没有从这些返回数据 --:--数据:输出文件名 这些是提取数据的查询,并在给定嵌入“output_filename”的主题下保存 --:——清理 最后,这些查询将在最后两个执行任何需要执行的清理,可能是为了删除和中间表。

每个块中可以有多个命令,在每个块中可以有多个命令,每个命令都应以分号(;)结尾。注意:数据块应该只包含一个命令。 下面是一个使用这三种类型块的简单示例,但请注意,您通常只需要一个“数据”块:

带注释的SQL示例

--:--SETUPCREATEtabletemporary_tableasSelect*fromtable_aaJointable_bbona.key=b.key;CREATEtabletemporary_table2asSelect*fromnew_table_aaJointable_bbona.key=b.key;--:--DATA: trackedSelect*fromtemporaty_tableWherepackage_type=tracked;--:--DATA: sd_aggSelectroute_id,count(barcode)Fromtemporary_tableWherepackage_type=special_deliverygroupby1;--:--CLEANUPDROPtabletemporary_table;DROPtabletemporary_table2;

使用解析器

一旦注释了sql,就可以很容易地使用sqlparser来解析和执行命令。这里有一个简单的例子: sqlparser示例

importglobimportyamlfromsqlparserimportSqlParser#load credentialswithopen('credentials.yaml','r')asfile:creds=yaml.load(file)#create a parser and point it to where you want the sql extracts to be storedparser=SqlParser(output_basepath="/path/to/store/files/",sep="|")#set the address and credentialsparser.set_address("//00.000.00.000/DBS_PORT=0000")#replace address with ip and port of your databaseparser.set_credentials(creds['td_username'],creds['td_password'])parser.open_connection()#run all the queries you want executedqueries=glob.glob("path/to/annotated/files/*.sql")forqueryinqueries:parser.parse_sql(path=query)parser.run_all()

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

推荐PyPI第三方库


热门话题
java限制C++代码访问JNI中的某些类   Android上的java DateFormat:不可解析的日期   通过json进行java迭代,并为其他请求调用多个API   Netbeans中的java JavaFX项目引发异常“输入流不能为null”   多线程Java newFixedThreadPool解释   |在java字符串中无法识别。split()方法   Java中的原始包装器类是否被视为引用类型?   Java swing。如何在intellij idea GUI设计工具中重写组件方法   数组乘矩阵   java将30GB的XML文件分割成小块XML   java通过一棵树递归找到一个节点,并返回指向该节点的路径   java如何将可观察的<Observable<List<T>>转换为可观察的<List<T>>   使用java在web服务器上更改php文件中的字符串?   java希望开发像tomcat这样的servlet容器   java希望提高编程的数学技能