Mercurial > repos > jjohnson > sqlite_to_tabular
comparison sqlite_to_tabular.py @ 3:f079ea3884b3 draft default tip
planemo upload for repository https://github.com/jj-umn/galaxytools/tree/master/sqlite_to_tabular commit 64a950cafd655311c99a54f96a27b49f0bdf2731-dirty
| author | jjohnson |
|---|---|
| date | Thu, 21 Jan 2016 09:34:45 -0500 |
| parents | bc50a7b7f246 |
| children |
comparison
equal
deleted
inserted
replaced
| 2:bc50a7b7f246 | 3:f079ea3884b3 |
|---|---|
| 1 #!/usr/bin/env python | 1 #!/usr/bin/env python |
| 2 | 2 |
| 3 import sys | 3 import sys |
| 4 import re | |
| 4 import os.path | 5 import os.path |
| 5 import optparse | 6 import optparse |
| 6 import sqlite3 as sqlite | 7 import sqlite3 as sqlite |
| 7 | 8 |
| 9 | |
| 10 def regex_match(expr, item): | |
| 11 return re.match(expr, item) is not None | |
| 12 | |
| 13 | |
| 14 def regex_search(expr, item): | |
| 15 return re.search(expr, item) is not None | |
| 16 | |
| 17 | |
| 18 def regex_sub(expr, replace, item): | |
| 19 return re.sub(expr, replace, item) | |
| 20 | |
| 21 | |
| 8 def __main__(): | 22 def __main__(): |
| 9 #Parse Command Line | 23 # Parse Command Line |
| 10 parser = optparse.OptionParser() | 24 parser = optparse.OptionParser() |
| 11 parser.add_option( '-s', '--sqlitedb', dest='sqlitedb', default=None, help='The SQLite Database' ) | 25 parser.add_option('-s', '--sqlitedb', dest='sqlitedb', default=None, help='The SQLite Database') |
| 12 parser.add_option( '-q', '--query', dest='query', default=None, help='SQL query' ) | 26 parser.add_option('-q', '--query', dest='query', default=None, help='SQL query') |
| 13 parser.add_option( '-Q', '--query_file', dest='query_file', default=None, help='SQL query file' ) | 27 parser.add_option('-Q', '--query_file', dest='query_file', default=None, help='SQL query file') |
| 14 parser.add_option( '-n', '--no_header', dest='no_header', action='store_true', default=False, help='Include a column headers line' ) | 28 parser.add_option('-n', '--no_header', dest='no_header', action='store_true', default=False, help='Include a column headers line') |
| 15 parser.add_option( '-o', '--output', dest='output', default=None, help='Output file for query results' ) | 29 parser.add_option('-o', '--output', dest='output', default=None, help='Output file for query results') |
| 16 (options, args) = parser.parse_args() | 30 (options, args) = parser.parse_args() |
| 17 | 31 |
| 18 # determine output destination | 32 # determine output destination |
| 19 if options.output != None: | 33 if options.output is not None: |
| 34 try: | |
| 35 outputPath = os.path.abspath(options.output) | |
| 36 outputFile = open(outputPath, 'w') | |
| 37 except Exception, e: | |
| 38 print >> sys.stderr, "failed: %s" % e | |
| 39 exit(3) | |
| 40 else: | |
| 41 outputFile = sys.stdout | |
| 42 | |
| 43 query = None | |
| 44 if (options.query_file is not None): | |
| 45 with open(options.query_file, 'r') as fh: | |
| 46 query = '' | |
| 47 for line in fh: | |
| 48 query += line | |
| 49 elif (options.query is not None): | |
| 50 query = options.query | |
| 51 | |
| 52 if (query is None): | |
| 53 try: | |
| 54 conn = sqlite.connect(options.sqlitedb) | |
| 55 c = conn.cursor() | |
| 56 tables_query = "SELECT name,sql FROM sqlite_master WHERE type='table' ORDER BY name" | |
| 57 rslt = c.execute(tables_query).fetchall() | |
| 58 for table, sql in rslt: | |
| 59 print >> sys.stderr, "Table %s:" % table | |
| 60 try: | |
| 61 col_query = 'SELECT * FROM %s LIMIT 0' % table | |
| 62 cur = conn.cursor().execute(col_query) | |
| 63 cols = [col[0] for col in cur.description] | |
| 64 print >> sys.stderr, " Columns: %s" % cols | |
| 65 except Exception, exc: | |
| 66 print >> sys.stderr, "Error: %s" % exc | |
| 67 except Exception, exc: | |
| 68 print >> sys.stderr, "Error: %s" % exc | |
| 69 exit(0) | |
| 20 try: | 70 try: |
| 21 outputPath = os.path.abspath(options.output) | 71 conn = sqlite.connect(options.sqlitedb) |
| 22 outputFile = open(outputPath, 'w') | 72 conn.create_function("re_match", 2, regex_match) |
| 23 except Exception, e: | 73 conn.create_function("re_search", 2, regex_search) |
| 24 print >> sys.stderr, "failed: %s" % e | 74 conn.create_function("re_sub", 3, regex_sub) |
| 25 exit(3) | 75 cur = conn.cursor() |
| 26 else: | 76 results = cur.execute(query) |
| 27 outputFile = sys.stdout | 77 if not options.no_header: |
| 78 outputFile.write("#%s\n" % '\t'.join([str(col[0]) for col in cur.description])) | |
| 79 for i, row in enumerate(results): | |
| 80 outputFile.write("%s\n" % '\t'.join([str(val) for val in row])) | |
| 81 except Exception, exc: | |
| 82 print >> sys.stderr, "Error: %s" % exc | |
| 83 exit(1) | |
| 28 | 84 |
| 29 query = None | 85 if __name__ == "__main__": |
| 30 if (options.query_file != None): | 86 __main__() |
| 31 with open(options.query_file,'r') as fh: | |
| 32 query = '' | |
| 33 for line in fh: | |
| 34 query += line | |
| 35 elif (options.query != None): | |
| 36 query = options.query | |
| 37 | |
| 38 if (query is None): | |
| 39 try: | |
| 40 conn = sqlite.connect(options.sqlitedb) | |
| 41 c = conn.cursor() | |
| 42 tables_query = "SELECT name,sql FROM sqlite_master WHERE type='table' ORDER BY name" | |
| 43 rslt = c.execute(tables_query).fetchall() | |
| 44 for table,sql in rslt: | |
| 45 print >> sys.stderr, "Table %s:" % table | |
| 46 try: | |
| 47 col_query = 'SELECT * FROM %s LIMIT 0' % table | |
| 48 cur = conn.cursor().execute(col_query) | |
| 49 cols = [col[0] for col in cur.description] | |
| 50 print >> sys.stderr, " Columns: %s" % cols | |
| 51 except Exception, exc: | |
| 52 print >> sys.stderr, "Error: %s" % exc | |
| 53 except Exception, exc: | |
| 54 print >> sys.stderr, "Error: %s" % exc | |
| 55 exit(0) | |
| 56 #if not sqlite.is_read_only_query(query): | |
| 57 # print >> sys.stderr, "Error: Must be a read only query" | |
| 58 # exit(2) | |
| 59 try: | |
| 60 conn = sqlite.connect(options.sqlitedb) | |
| 61 cur = conn.cursor() | |
| 62 results = cur.execute(query) | |
| 63 if not options.no_header: | |
| 64 outputFile.write("#%s\n" % '\t'.join([str(col[0]) for col in cur.description])) | |
| 65 # yield [col[0] for col in cur.description] | |
| 66 for i,row in enumerate(results): | |
| 67 # yield [val for val in row] | |
| 68 outputFile.write("%s\n" % '\t'.join([str(val) for val in row])) | |
| 69 except Exception, exc: | |
| 70 print >> sys.stderr, "Error: %s" % exc | |
| 71 exit(1) | |
| 72 | |
| 73 if __name__ == "__main__": __main__() | |
| 74 |
