Guest

Search through SQLite database for a paticular word

By: allez on Jul 19th, 2011  |  syntax: Python  |  size: 1.37 KB  |  hits: 38  |  expires: Never
download  |  raw  |  embed  |  report abuse
Copied
  1. #!/usr/bin/env python
  2.  
  3. # @author allez <free at penkovsky dot mail dot ua>
  4. # originally written for www.ravel.tk
  5.  
  6. import sqlite3
  7. import sys
  8.  
  9. class Connector:
  10.   def __init__(self, fname):
  11.     self.c = sqlite3.connect(fname)
  12.    
  13.   def q(self,query):
  14.     return self.c.execute(query)
  15.    
  16. def get_all_tables(c):
  17.     query = "SELECT * FROM sqlite_master"
  18.     tables = c.q(query)
  19.     return [table[1] for table in tables]
  20.  
  21. def get_table_columns(c, table):
  22.     query = "PRAGMA table_info(" + table + ")"
  23.     res = c.q(query)
  24.     return [col[1] for col in res]
  25.  
  26. def lookup_in_tables(c, word, tables):
  27.     found = []
  28.     for table in tables:
  29.         print "Processing " + table
  30.         cols = get_table_columns(c, table)
  31.         for col in cols:
  32.             try:
  33.                 query = "SELECT * FROM %s WHERE %s = '%s'" % (table, col, word)
  34.                 res = c.q(query)
  35.                 for k in res:
  36.                     found.append((table,col,k))
  37.             except err: print err, query
  38.     return found
  39.  
  40. if __name__ == "__main__":
  41.   if len(sys.argv) == 1:
  42.       print "USAGE: %s <word> [<dbname>]" % sys.argv[0]
  43.       sys.exit()
  44.   dbname = 'defaultname.sdb'
  45.   if len(sys.argv) > 2: dbname = sys.argv[2]
  46.   a = Connector(dbname)
  47.   all_tables = get_all_tables(a)
  48.   res = lookup_in_tables(a, sys.argv[1], all_tables)
  49.   print "results:"
  50.   for i in res:print i