pmag_sqlhelp (version 1.5, 2005/11/21)
index
/Users/schwehr/projects/xcore/src/pmag-kds-py/pmag_sqlhelp.py

Command utility to examine a SEGY file
 
     Copyright (C) 2005  Kurt Schwehr
 
    This program is free software; you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation; either version 2 of the License, or
    (at your option) any later version.
 
    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.
 
    You should have received a copy of the GNU General Public License
    along with this program; if not, write to the Free Software
    Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 
Originally in segy-py version 0.30
 
How do I assemble queries like this?
 
    SELECT COUNT(samplename) AS count FROM \
        (SELECT DISTINCT(samplename) AS samplename FROM \
         ams WHERE corenum=1 AND coretype='p');
 
TODO:
  * subqueries
  * make a super class so that inserts and selects can verify based on the create str
  * take the super class info from the database?

 
Modules
       
datetime
sys

 
Classes
       
sqlcreate
sqlinsert
sqlselect

 
class sqlcreate
    Helper for building create SQL commands.
 
FIX: add type checking
 
  Methods defined here:
__init__(self, table)
Kick it off with no fields
 
table - which table are we going to insert into
__str__(self)
Return the SQL string for the table creation
add(self, field, typeStr)
Unchecked field.  Provide the field and type all in one.  Use
this if nothing matches what you need.
 
e.g.:
create.add('corenumber','INTEGER')
create.add('username','VARCHAR(40)')
create.add('id','INTEGER PRIMARY KEY')
addInt(self, field)
addReal(self, field)
addVarChar(self, field, length)

 
class sqlinsert
    Help create an SQL insert statement for injecting data into a database.  Wee!
 
FIX: provide some sort of validation, maybe with the CREATE string or class?
 
  Methods defined here:
__init__(self, table)
Kick it off with no fields
 
table - which table are we going to insert into
__str__(self)
Return the SQL string for the insert
add(self, field, value)
Add a field value pair to the insert
 
Integers and floats should NOT be converted to strings.

 
class sqlselect
    Construct an sql select query
 
Sometimes it just gets ugly having all that comma and WHERE AND
logic in there.  This code takes care of that
 
  Methods defined here:
__init__(self)
__str__(self)
Return the query as a string
addfield(self, fieldname)
Add a field name to return
addfrom(self, tableName)
Which tables the query will pull from
addwhere(self, boolTest)
Add expressions to chain together with ANDs
setlimit(self, numOfItems)
Set the maximum number of items to return
setorderby(self, field, desc=False)
Make the returned rows come in some order

 
Functions
       
sqlInsertStrFromList(table, aList)
Take a list and make an insert string.  This works with
dictionaries too.  Here is a quick example:
 
aList = [('one',1),('2','two'),('threepoint',3.)]
insertStr = sql_util.sqlInsertStrFromList('myTable',aList)

 
Data
        __author__ = 'Kurt Schwehr'
__date__ = '2005/11/21'
__version__ = '1.5'

 
Author
        Kurt Schwehr