此包有助于自动分析和执行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_delivery”groupby1;--:--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()