pytable.dbresultset
index
p:\table\pytable\dbresultset.py

Thick wrapper around a pytable cursor with a result-set

 
Modules
       
basicproperty.basic
basicproperty.common
pytable.dbschema
pytable.lazyresultset
basicproperty.propertied
pytable.sqlquery
basictypes.typeunion
pytable.viewschema
basicproperty.weak

 
Classes
       
LazyResultSet(object)
DBResultSet(LazyResultSet, Propertied)
Propertied(object)
DBResultSet(LazyResultSet, Propertied)
SQLMultiQuery(SQLQuery)
SimpleTableUpdate

 
class DBResultSet(LazyResultSet, Propertied)
    A pseudo-sequence with read/write lazy-result-set semantics
 
The DBResultSet wraps a pytable cursor which has a
retrieved result-set to provide access to a controlling
schema (a table or view schema) and to provide automated
commit/abort of changes to the generated dbrow objects.
 
Via the lazyresultset base-class provides lazy loading
of the results from the set.
 
 
Method resolution order:
DBResultSet
LazyResultSet
Propertied
object

Methods defined here:
__getattr__(self, key)
Delegate attribute lookup to our schema if it exists
abort(self, rows=None)
Abort changes to rows, or all changed rows
commit(self, rows=None)
Commit changes to rows, or all changed rows
getProperties(self)
Retrieve the properties for this particular result-set
wrapRow(self, data, index)
Wrap a single row in our DBRow class

Data and other attributes defined here:
autoCommit = <BooleanProperty 'autoCommit'>
Override schema's autoCommit value
 
autoCommit cause a database update to be done on every
property __set__.  TableSchemas normally do *not* define an
autoCommit attribute, so the result-set's autoCommit
value is normally derived from the defaultFunction of this
property (which defaults to false)
cursor = <BasicProperty 'cursor'>
Pointer to our database cursor (a pytable dbcursor instance)
cursorDescription = <BasicProperty 'cursorDescription'>
The db-api-style cursor description for data-rows
 
This is used to unify result-set fields with the
controlling schema, as the order of fields may
not match that within the database.
length = <IntegerProperty 'length'>
Length of the table if calculated yet, otherwise -1
 
You should use len( self ), not self.length for any
code you write.  Length is just part of the
lazyresultset base-class's API.
 
Note: this property shadows the lazyresultset's
attribute to provide documentation.
schema = <BasicProperty 'schema'>
The controlling schema for this result-set

Methods inherited from LazyResultSet:
__contains__(self, row)
Determine whether we contain the given row
 
Performance Note:
        If the row object has an "index" attribute, this
        method can short-circuit by checking if that index
        is == given row.  Otherwise (or if self[row.index]
        != given row), needs to scan sequentially, which
        may trigger a full result-set load.
__delitem__(self, index)
Delete row at index from the table
 
raises TypeError
 
Sub-classes that allow for deleting records may
want to override this method.
__getitem__(self, index)
Get a particular row in the table
 
Retrieves a given row in the table. If the row is
not yet in the cache, this will cause all rows up
to and including the row to be retrieved into the
row-cache.
__getslice__(self, start=0, stop=2147483647, step=1)
Get slice from the result-set
 
This returns a new list of records/objects/rows from
the result-set, forcing loading of all objects in the
slice.
 
start=0, stop= sys.maxint, step=1
__init__(self, cursor, count=100, *arguments, **named)
Initialize the LazyResultSet
 
cursor -- DB-API cursor with the result set to be
        wrapped by the LazyResultSet
count -- number of records to retrieve in a single
        call to fetchMany
__iter__(self)
Iterate through this result-set sequentially
 
You should be able to use multiple iterators
simultaneously alongside random access operations without
causing any problems.
__len__(self)
Return length of the table (number of rows)
 
Performance Note:
        If the cursor object does not support the rowcount
        attribute, then __len__ will force a full load of
        the result set.
append(self, row)
Append a row to the table
 
raises TypeError
 
Sub-classes that allow for creating new records may
want to override this method.
calculateLength(self)
Calculation of rowset length
 
Called by the __len__ method and other instances
with the length of the entire result set is required,
see performance note under __len__.
fetchMany(self, count=None)
Fetch and return count rows from cursor
 
Note: these rows are not cached, you should not likely
call this method save in a sub-class from a customized
forceLoad method.
forceLoad(self, toIndex=None)
Force loading of all rows up to toIndex
 
This method is called to load up to the given
index in the result set.  The method stops
loading when there are no more results, or the
cache is now long enough to index with toIndex.
index(self, row)
Return the index of the given row, uses == checking for rows
 
Performance Note:
        If the row object has an "index" attribute, this
        method can short-circuit by checking if that index
        is == given row.  Otherwise (or if self[row.index]
        != given row), needs to scan sequentially, which
        may trigger a full result-set load.

Data and other attributes inherited from LazyResultSet:
__dict__ = <dictproxy object at 0x01DF3890>
dictionary for instance variables (if defined)
__weakref__ = <attribute '__weakref__' of 'LazyResultSet' objects>
list of weak references to the object (if defined)

Methods inherited from Propertied:
__str__(self)
Get a friendly representation of the object
clone(self, **newValues)
Clone this object, with optional new property values
 
This method calls the __init__ method of your class with
the current property values of your class.  Providing newValues
(a dictionary) overrides property settings with new values.
getCloneProperties(self)
Get properties dictionary (key:value) for use in cloning of the instance
 
By default you get getProperties()' values, with an
attempt made to use the property's name, then the property's
direct "__get__" method.
toString(self, indentation='', alreadyDone=None, indentString=' ')
Get a nicely formatted representation of this object
 
This version assumes that getProperties returns
the list of properties which should be presented,
it recursively calls it's children with greater
indents to get their representations.
 
indentation -- current string indentation level
alreadyDone -- set of object ids which are already finished
 
XXX Needs a far better API, likely a stand-alone class
        without the automatic inheritance problems here :(

 
class SimpleTableUpdate(SQLMultiQuery)
    Query to do an update in a single table for a set of rows
 
Note:
        This really is the "simple" update query.  DBRow instances,
        which are far more commonly used, have their own far more
        involved update/insert/delete queries.
        
        XXX Should likely eliminate this code?  It's only use is
                for doing updates of large numbers of rows
                simultaneously with the same fields for each update.
 
 
Method resolution order:
SimpleTableUpdate
SQLMultiQuery
SQLQuery
Propertied
object

Methods defined here:
__call__(self, cursor, tableName, keySet, columnSet, rows, **named)
Build the sql query up from given values and then execute it
 
cursor -- DBCursor or DBConnection object
tableName -- string tableName into which to update
keySet -- list of key field names (WHERE clause)
columnSet -- list of fields to update
rows -- list of objects/dictionaries used as data-source(s)
named -- passed to the underlying query

Data and other attributes defined here:
sql = 'UPDATE\n\t\t%(tableName)s\n\tSET\n\t\t%(columnFragment)s\n\tWHERE\n\t\t%(keySetFragment)s\n\t;'

Methods inherited from SQLMultiQuery:
do(self, cursor, query, dataSet, **namedarguments)
Do the actual processing of the query (executemany)
 
cursor -- a dbcursor object
query -- a final SQL query string, must be fully
        substituted so that decree will operate properly
        with the given cursor.
dataSet -- must have been passed to the __call__ method
        as a named argument.  Should be a sequence of
        objects suitable for use as argument-sources for the
        cursor's executemany method.
namedarguments -- unused in this version, these are the
        same arguments passed to the __call__ method.
 
returns the result of the cursor's executemany method,
which is currently ignored by the __call__ method.

Methods inherited from SQLQuery:
__init__(self, sql=None, debug=None, **named)
Initialise the SQLQuery
 
sql -- sql string or None to use class' sql value
debug -- if provided (not None), override class' debug flag
encodeQuery(self, query, cursor=None)
Encode query for use by the given cursor
processResults(self, cursor, **namedarguments)
Convert the query results to desired format
 
cursor -- a dbcursor object which has just executed
        this query. Note that the query may have
        returned an empty or null resultset, so this code
        should deal with that eventuality.
namedarguments -- These are the same arguments
        passed to the __call__ method.
 
This method provides post-processing of the query
results into application-specific data formats.
 
By default, simply returns the cursor.

Data and other attributes inherited from SQLQuery:
debug = 0
name = ''

Methods inherited from Propertied:
__str__(self)
Get a friendly representation of the object
clone(self, **newValues)
Clone this object, with optional new property values
 
This method calls the __init__ method of your class with
the current property values of your class.  Providing newValues
(a dictionary) overrides property settings with new values.
getCloneProperties(self)
Get properties dictionary (key:value) for use in cloning of the instance
 
By default you get getProperties()' values, with an
attempt made to use the property's name, then the property's
direct "__get__" method.
toString(self, indentation='', alreadyDone=None, indentString=' ')
Get a nicely formatted representation of this object
 
This version assumes that getProperties returns
the list of properties which should be presented,
it recursively calls it's children with greater
indents to get their representations.
 
indentation -- current string indentation level
alreadyDone -- set of object ids which are already finished
 
XXX Needs a far better API, likely a stand-alone class
        without the automatic inheritance problems here :(

Class methods inherited from Propertied:
getProperties(cls) from type
Get the BasicProperty properties for a particular object's class

Data and other attributes inherited from Propertied:
__dict__ = <dictproxy object at 0x01DF3950>
dictionary for instance variables (if defined)
__weakref__ = <attribute '__weakref__' of 'Propertied' objects>
list of weak references to the object (if defined)

 
Data
        generators = _Feature((2, 2, 0, 'alpha', 1), (2, 3, 0, 'final', 0), 4096)