DBSeek

Discussion in 'Python' started by godwin, Jul 12, 2005.

  1. godwin

    godwin Guest

    Hello there,
    I need some thoughts about a web application that i am dreaming
    and
    drooling about in python. I want a search page to look exactly like
    Google. But when i press the search button, it should search a database
    in an rdbms like Oracle and provide results.
    For example, if my keywords are "all customers with names
    starting with 'God'" it should somehow search table CUSTOMER , with
    following query :
    SELECT CUSTNAME FROM CUSTOMER WHERE CUSTNAME LIKE 'God%'
    So we basically need is a good python parser module which parses the
    keywords into an sql or sqls and list the results. I can look in the
    keywords for table and column synonyms and map it into table and column
    names and create sql but it's not a foolproof idea as we all know that
    english is a very vague language. The above idea wil fail , if i can't
    identify table,column names ,operators and values in their logical
    orders so as to create a syntactically correct sql. If there are more
    tables involved, i should also think of joining tables
    (inner,outer,equi joins). All I want is some enlightening thoughts from
    the python hackers(i mean programmers) out there.Plz polish your grey
    cells and let me know your thoughts.

    # this is my basic and foolish keywordparser
    # the object db provides the table as well as column names
    # as u can see it may or may not work even for a single table
    class KeyWordParser(object):
    def __init__(self,keywords,db):
    self.keywords = keywords.upper().split()
    self.db = db
    self.tables = []
    self.columns = []

    def parse2sql(self):
    for word in self.keywords:
    if word in self.db.tables():
    self.tables.append(word)

    for word in self.keywords:
    for table in self.tables:
    for column in self.db.columns(table):
    if column == word:
    self.columns.append(column)
    sql = 'SELECT %s FROM %s' % (','.join(self.columns) or
    '*',','.join(self.tables))
    return sql
    godwin, Jul 12, 2005
    #1
    1. Advertising

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.

Share This Page