I reflect on a database and load RowObjects from it.
In order to do this, I interrogate a relational database to
extract schema information and interface with RowObject class
objects that can interact with specific tables. Currently this
works only with PostgreSQL databases, but this functionality will
hopefully be extended
Methods
|
|
|
|
__init__
|
__init__ (
self,
dbpool,
stubs,
populatedCallback,
)
Initialize me against a database.
Arguments:
dbpool: a database pool.
stubs: a set of definitions of classes to construct, of the form [
(StubClass, databaseTableName, KeyColumns) ] Each StubClass is a user-defined class that the
constructed class will be constructed from. It should be
derived from RowObject.
|
|
__setstate__
|
__setstate__ ( self, state )
|
|
_cbSelectData
|
_cbSelectData (
self,
data,
rowObject,
)
Exceptions
|
|
DBError( "select data included more than one row" )
DBError( "select data was empty" )
|
|
|
_objectLoader
|
_objectLoader (
self,
transaction,
tableName,
keyColumns,
data,
rowClass,
whereClause,
factoryMethod,
)
worker method to load objects from a table.
|
|
_populate
|
_populate ( self )
|
|
_populateRowClass
|
_populateRowClass (
self,
transaction,
rowClass,
tableName,
keyColumns,
)
construct all the SQL for database operations on <tableName> and
populate the class <rowClass> with that info.
NOTE: works with Postgresql for now...
NOTE: 26 - 29 are system column types that you shouldn't use...
|
|
_really_populate
|
_really_populate ( self )
|
|
_transPopulateClasses
|
_transPopulateClasses ( self, transaction )
Used to construct the row classes in a single interaction.
Exceptions
|
|
DBError("Stub class (%s) is not derived from RowObject" % str( stubClass ) )
|
|
|
buildDeleteSQL
|
buildDeleteSQL (
self,
tableName,
keyColumns,
)
Build the SQL to delete a row from the table.
|
|
buildInsertSQL
|
buildInsertSQL (
self,
tableName,
columns,
)
(Internal) Build SQL to insert a new row.
Returns: SQL that is used to insert a new row for a rowObject
instance not created from the database.
|
|
buildSelectSQL
|
buildSelectSQL (
self,
rowClass,
tableName,
columns,
keyColumns,
)
(Internal) Build SQL to select a row for an existing rowObject.
Exceptions
|
|
DBError("Error: %r while formatting %s" %( dbe.args [ 0 ], rowClass ) )
|
|
|
buildUpdateSQL
|
buildUpdateSQL (
self,
rowClass,
tableName,
columns,
keyColumns,
)
(Internal) Build SQL to update a RowObject.
Returns: SQL that is used to contruct a rowObject class.
|
|
deleteRow
|
deleteRow ( self, rowObject )
delete the row for this object from the database.
|
|
deleteRowSQL
|
deleteRowSQL ( self, rowObject )
build SQL to delete me from the db.
|
|
getTableInfo
|
getTableInfo ( self, rowObject )
Get a TableInfo record about a particular instance.
Arguments:
This record contains various information about the instance's
class as registered with this reflector.
Raises:
Exceptions
|
|
DBError("class %s was not registered with %s" %( rowObject.__class__, self ) )
|
|
|
insertRow
|
insertRow ( self, rowObject )
insert a new row for this object instance.
|
|
insertRowSQL
|
insertRowSQL ( self, rowObject )
build SQL to insert my current state.
|
|
loadObjectsFrom
|
loadObjectsFrom (
self,
tableName,
keyColumns,
data,
rowClass,
whereClause="1 = 1",
factoryMethod=defaultFactoryMethod,
)
Load a set of RowObjects from a database.
Create a set of python objects of <rowClass> from the contents
of a table populated with appropriate data members. The
constructor for <rowClass> must take no args. Example to use
this:
class EmployeeRow(row.RowObject):
pass
def gotEmployees(employees):
for emp in employees:
emp.manager = "fred smith"
manager.updateRow(emp)
manager.loadObjectsFrom("employee",
["employee_name", "varchar"],
userData,
employeeFactory,
EmployeeRow,
"employee_name like 'm%%'"
).addCallback(gotEmployees)
NOTE: this functionality is experimental. be careful.
|
|
selectRow
|
selectRow ( self, rowObject )
load this rows current values from the database.
|
|
selectRowSQL
|
selectRowSQL ( self, rowObject )
|
|
updateRow
|
updateRow ( self, rowObject )
update my contents to the database.
|
|
updateRowSQL
|
updateRowSQL ( self, rowObject )
build SQL to update my current state.
|
|