Hi Mike, Thank you very much for replying to my post. I really appreciate it.
I agree that the init of the classes may have something to do with the problem. Maybe the way we are defining the attributes does not allow to SQLAlchemy table wrappers to view the attributes' values? What confuses me the most is that I am actually able to insert a row using sprint-python with the addxLPRVariable function below. Both approaches use the same variable classes. The row with id=33 below was inserted using spring-python. The row with id=32 below was inserted using SQLAlchemy. mysql> select * from variables where id >=32; +----------------------+-------+-------+----------+----------- +----------------------+ | id | value | units | name | dependent | independent_variable | +----------------------+-------+-------+----------+----------- +----------------------+ | 00000000000000000032 | 1 | | | NULL | NULL | | 00000000000000000033 | 1 | Hz | variable | 0 | NULL | +----------------------+-------+-------+----------+----------- +----------------------+ 2 rows in set (0.00 sec) #---------------------------------------------------------------------------------------------- # This function writes to the database: #---------------------------------------------------------------------------------------------- # def addxLPRVariable( self, xLPRVariable ): """Add an xLPRVariable to the database.""" rowsAffected=self.database_template.execute( """ INSERT INTO variables (id, name, units, value, dependent) VALUES (null, ?, ?, ?, ?) """, ( xLPRVariable.getName(), xLPRVariable.getUnits(), xLPRVariable.getValue(), xLPRVariable.isDependent() ) ) self.connection_factory.commit() logger.debug( "Added %d rows"%rowsAffected ) print "Added %d"%rowsAffected return rowsAffected #---------------------------------------------------------------------------------------------- # Here are the sql scripts #---------------------------------------------------------------------------------------------- # create table variables ( id bigint(20) unsigned zerofill NOT NULL AUTO_INCREMENT COMMENT 'Primary key, sequence', value float NOT NULL COMMENT 'Initial value for variable', units varchar(45) NOT NULL COMMENT 'Common Si units of variable', name varchar(45) NOT NULL COMMENT 'Name of the variable', dependent boolean, independent_variable float COMMENT 'The independent variable x', PRIMARY KEY (id) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Maps to the xLPRVariable Object'; create table dependence_variables ( id bigint(20) unsigned zerofill NOT NULL AUTO_INCREMENT COMMENT 'Primary key, sequence', variable_id bigint(20) unsigned zerofill COMMENT 'Foreign key to dependency_variable table', interpolate boolean, dependent_function varchar(4000) COMMENT 'The dependent function', evaluate boolean, xname_units varchar(45), xname varchar(45), PRIMARY KEY (id), FOREIGN KEY (variable_id) REFERENCES variables(id) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Maps to the dependency_variable object attribute'; create table data_set ( id bigint(20) unsigned zerofill NOT NULL AUTO_INCREMENT COMMENT 'Primary key, sequence', dependence_variable_id bigint(20) unsigned zerofill NOT NULL COMMENT 'data_set will be grouped by data_set_ids', x float NOT NULL COMMENT 'Value of x', y float NOT NULL COMMENT 'Value of y', PRIMARY KEY (id), FOREIGN KEY (dependence_variable_id) REFERENCES dependence_variables (id) ON DELETE CASCADE ON UPDATE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=latin1 COMMENT='Maps to the dependency_variable.data_set attribute'; #---------------------------------------------------------------------------------------------- # Here are the classes definition #---------------------------------------------------------------------------------------------- # class xLPRVariable( VariableQuantity ): ''' Defines a VariableUnitsAware object that may be a function of another independent variable x which is also a units-aware object classdocs args[0] = value:float args[1] = units:str kwargs['name'] = name:str kwargs['dependenceVariable'] = dependenceVariable:DependenceVariable ''' def __init__( self, *args, **kwargs ): ''' Constructor positional/required arguments: value:float = initial value for variable units:String = common SI units of variable Constructor keyed/optional arguments: name:String = name of variable dependent:Boolean is variable dependent upon another SIAM variable dependenceVariable:DependenceVariable ''' #======================================================================= # call the bound version of the superclass constructor #======================================================================= super( xLPRVariable, self ).__init__( *args ) print args if kwargs.has_key( 'name' ): self.__name=kwargs['name'] else: self.__name='variable' self.setName('variable') if kwargs.has_key( 'dependenceVariable' ): self.__dependenceVariable=kwargs['dependenceVariable'] else: self.__dependenceVariable=None if self.__dependenceVariable is not None: self.__dependent=True else: self.__dependent=False #set the units if kwargs.has_key( 'units' ): self.setUnits(kwargs['units']) else: self.setUnits(args[1]) #=============================================================================== # __name: String #=============================================================================== def getName( self ): ''' get VariableUnitsAware name @param name: VariableUnitsAware name @type name: String ''' return self.__name def setName( self, name ): ''' set VariableUnitsAware name @param name: VariableUnitsAware name @type name: String ''' self.__name=name def delName( self ): ''' delete VariableUnitsAware name @param name: VariableUnitsAware name @type name: String ''' del self.__name #=============================================================================== # units: String #=============================================================================== def getUnits( self ): ''' Units:String = units of VariableUnitsAware object ''' return self._getVariableUnits() def _getVariableUnits( self ): ''' Units:String = units of VariableUnitsAware object ''' return self.getUnitName() def setUnits( self, units ): ''' Units:String = units of VariableUnitsAware object ''' self._setVariableUnits( units ) def _setVariableUnits( self, units ): ''' Units:String = units of VariableUnitsAware object ''' self.convertToUnit( units ) def delUnits( self ): pass #=============================================================================== # x: float #=============================================================================== def __getDependentValue( self, x ): ''' evaluate y=f(x) by interpolation or by dependence function y=f (x) @param x: independent variable @type x: float ''' return self.value def getValueX( self, x = None ): ''' retrieve constant value or evaluate by providing a value for x @param x: value of independent variable to be evaluated @type x: float ''' if x is not None: if self.__dependent: if self.__dependenceVariable.isInterpolated(): return self.__dependenceVariable.interpolate( x ) elif self.__dependenceVariable.isEvaluated(): return self.__dependenceVariable.evaluate( x ) else: raise xLPRVariableException, "xLPRVariable: Dependence is not defined!" else: return self.value def isDependent( self ): ''' Check for dependence; returns True or False ''' if self.__dependent: return True else: return False def getDependenceVariable( self ): ''' Retrieve DependenceVariable object ''' return self.__dependenceVariable def setDependenceVariable( self, dependenceVariable ): ''' Establish a dependence between another variable @param dependenceVariable: variable that this VariableUnitsAware object is dependent on @type dependenceVariable: DependenceVariable ''' self.__dependenceVariable=dependenceVariable self.__dependent=True #=============================================================================== # create properties using Python 'property' function #=============================================================================== name=property( getName, setName, delName, "Variable Name's Docstring" ) units=property( getUnits, setUnits, delUnits, "Variable Units's Docstring" ) class DependenceVariable( VariableQuantity ): ''' classdocs ''' def __init__( self, *args, **kwargs ): # def __init__( self, xnameUnits, xname, dataSet = None, dependentFunction = None ): ''' Constructor positional/required arguments: xname:String giving name of independent variable xnameUnits:String giving name of units for independent variable Constructor keyed/optional arguments: dataSet = list of tuples of (x,y) pairs dependentFunction = single-valued univariate function where y = f(x) ''' if len( args )<2: raise DependenceException, "Error: expecting 2 values in *args list" args2=[] args2.append( 1.0 ) args2.append( args[0] ) # call the bound version of the superclass constructor super( DependenceVariable, self ).__init__( *args2 ) if kwargs.has_key( 'dataSet' ): self.__dataSet=kwargs['dataSet'] else: self.__dataSet=None if kwargs.has_key( 'dependentFunction' ): self.__dependentFunction=kwargs['dependentFunction'] else: self.__dependentFunction=None if self.__dataSet is None and self.__dependentFunction is None: raise DependenceException, "Warning: dependence not defined" if isinstance( args[0], str ): self.__xname=args[0] else: raise DependenceException, "Error: args[0] = xname wrong type" if isinstance( args[1], str ): self.__xnameUnits=args[1] else: raise DependenceException, "Error: args[1] = xnameUnits wrong type" self.x=[] self.y=[] self.vi=None if self.__dataSet is not None: #=================================================================== # create InterpolatingFunction object from Scientific Python package #=================================================================== for x, y in self.__dataSet: self.x.append( x ) self.y.append( y ) self.x=np.asarray( self.x ) self.y=np.asarray( self.y ) self.vi=Ip( ( self.x, ), self.y ) self.__interpolate=True else: self.__dataSet=None self.__interpolate=False if self.__dependentFunction is not None: self.__evaluate=True else: self.__dependentFunction=None self.__evaluate=False #self.__id; def isInterpolated( self ): return self.__interpolate def isEvaluated( self ): return self.__evaluate def getXnameUnits( self ): ''' units:String of independent variable ''' return self.getUnitName() def getXname( self ): ''' name:String of independent variable ''' return self.__xname def getData( self ): ''' dependence data as list of tuples that are ordered pairs (x,y) ''' if self.__dataSet is not None: return self.__dataSet else: raise DependenceException, "Error: Dependence Dataset not defined" def getFunction( self ): ''' f(x) dependence function of single independent variable x: y=f (x) ''' if self.__dependentFunction is not None: return self.__dependentFunction else: raise DependenceException, "Error: Dependence function not defined" def setData( self, data ): ''' set dependence data as list of tuples that are ordered pairs (x,y) @param data: list of ordered pairs of (independent,dependent) @type data: list of tuples (x,y) ''' self.__dataSet=data self.__interpolate=True #=================================================================== # create InterpolatingFunction object from Scientific Python package #=================================================================== for x, y in self.__dataSet: self.x.append( x ) self.y.append( y ) self.x=np.asarray( self.x ) self.y=np.asarray( self.y ) self.vi=Ip( ( self.x, ), self.y ) def setFunction( self, function ): ''' Set dependent function @param function: y = f(x) @type function: f(x) ''' self.__dependentFunction=function self.__evaluate=True def interpolate( self, x ): if self.__interpolate: return self.vi( x ) else: raise DependenceException, "Error: dependence data not defined" def evaluate( self, x ): ''' Evaluate using supplied univariate function (see setFunction) @param x: independent variable @type x: float ''' if self.__dependentFunction is None: raise DependenceException, "Error: Dependent function has not been specified" else: return self.__dependentFunction( x ) class DataSet( object ): ''' classdocs ''' def __init__( self, x, y): self.x=x self.y=y def getX(self): return self.__x def getY(self): return self.__y def setX(self, value): self.__x = value def setY(self, value): self.__y = value def delX(self): del self.__x def delY(self): del self.__y x = property(getX, setX, delX, "X's Docstring") y = property(getY, setY, delY, "Y's Docstring") class DependenceVariable( VariableQuantity ): ''' classdocs ''' def __init__( self, *args, **kwargs ): # def __init__( self, xnameUnits, xname, dataSet = None, dependentFunction = None ): ''' Constructor positional/required arguments: xname:String giving name of independent variable xnameUnits:String giving name of units for independent variable Constructor keyed/optional arguments: dataSet = list of tuples of (x,y) pairs dependentFunction = single-valued univariate function where y = f(x) ''' if len( args )<2: raise DependenceException, "Error: expecting 2 values in *args list" args2=[] args2.append( 1.0 ) args2.append( args[0] ) # call the bound version of the superclass constructor super( DependenceVariable, self ).__init__( *args2 ) if kwargs.has_key( 'dataSet' ): self.__dataSet=kwargs['dataSet'] else: self.__dataSet=None if kwargs.has_key( 'dependentFunction' ): self.__dependentFunction=kwargs['dependentFunction'] else: self.__dependentFunction=None if self.__dataSet is None and self.__dependentFunction is None: raise DependenceException, "Warning: dependence not defined" if isinstance( args[0], str ): self.__xname=args[0] else: raise DependenceException, "Error: args[0] = xname wrong type" if isinstance( args[1], str ): self.__xnameUnits=args[1] else: raise DependenceException, "Error: args[1] = xnameUnits wrong type" self.x=[] self.y=[] self.vi=None if self.__dataSet is not None: #=================================================================== # create InterpolatingFunction object from Scientific Python package #=================================================================== for x, y in self.__dataSet: self.x.append( x ) self.y.append( y ) self.x=np.asarray( self.x ) self.y=np.asarray( self.y ) self.vi=Ip( ( self.x, ), self.y ) self.__interpolate=True else: self.__dataSet=None self.__interpolate=False if self.__dependentFunction is not None: self.__evaluate=True else: self.__dependentFunction=None self.__evaluate=False #self.__id; def isInterpolated( self ): return self.__interpolate def isEvaluated( self ): return self.__evaluate def getXnameUnits( self ): ''' units:String of independent variable ''' return self.getUnitName() def getXname( self ): ''' name:String of independent variable ''' return self.__xname def getData( self ): ''' dependence data as list of tuples that are ordered pairs (x,y) ''' if self.__dataSet is not None: return self.__dataSet else: raise DependenceException, "Error: Dependence Dataset not defined" def getFunction( self ): ''' f(x) dependence function of single independent variable x: y=f (x) ''' if self.__dependentFunction is not None: return self.__dependentFunction else: raise DependenceException, "Error: Dependence function not defined" def setData( self, data ): ''' set dependence data as list of tuples that are ordered pairs (x,y) @param data: list of ordered pairs of (independent,dependent) @type data: list of tuples (x,y) ''' self.__dataSet=data self.__interpolate=True #=================================================================== # create InterpolatingFunction object from Scientific Python package #=================================================================== for x, y in self.__dataSet: self.x.append( x ) self.y.append( y ) self.x=np.asarray( self.x ) self.y=np.asarray( self.y ) self.vi=Ip( ( self.x, ), self.y ) def setFunction( self, function ): ''' Set dependent function @param function: y = f(x) @type function: f(x) ''' self.__dependentFunction=function self.__evaluate=True def interpolate( self, x ): if self.__interpolate: return self.vi( x ) else: raise DependenceException, "Error: dependence data not defined" def evaluate( self, x ): ''' Evaluate using supplied univariate function (see setFunction) @param x: independent variable @type x: float ''' if self.__dependentFunction is None: raise DependenceException, "Error: Dependent function has not been specified" else: return self.__dependentFunction( x ) class DataSet( object ): ''' classdocs ''' def __init__( self, x, y): self.x=x self.y=y def getX(self): return self.__x def getY(self): return self.__y def setX(self, value): self.__x = value def setY(self, value): self.__y = value def delX(self): del self.__x def delY(self): del self.__y x = property(getX, setX, delX, "X's Docstring") y = property(getY, setY, delY, "Y's Docstring") -- You received this message because you are subscribed to the Google Groups "sqlalchemy" group. To post to this group, send email to sqlalch...@googlegroups.com. To unsubscribe from this group, send email to sqlalchemy+unsubscr...@googlegroups.com. For more options, visit this group at http://groups.google.com/group/sqlalchemy?hl=en.