Hi Michael, 

Here is the beginning of my Cube class in SQLalchemy.  It also has a bunch 
of properties and methods I'm not printing here, to keep it short   

class Cube(Base,ArrayOps):
__tablename__ = 'cube'
__table_args__ = {'autoload' : True, 'schema' : 'mangadatadb', 
'extend_existing':True}

specres = deferred(Column(ARRAY(Float)))

def __repr__(self):
return '<Cube (pk={0}, plate={1}, ifudesign={2}, tag={3})>'.format(self.pk, 
self.plate, self.ifu.name,self.pipelineInfo.version.version)

Here is the chain (going backwards) that produces my Base

Base = db.Base

db = DatabaseConnection()

and here is my DatabaseConnection class

class DatabaseConnection(object):

_singletons = dict()

def __new__(cls, database_connection_string=None, expire_on_commit=True):
"""This overrides the object's usual creation mechanism."""

if not cls in cls._singletons:
assert database_connection_string is not None, "A database connection 
string must be specified!"
cls._singletons[cls] = object.__new__(cls)

# ------------------------------------------------
# This is the custom initialization
# ------------------------------------------------
me = cls._singletons[cls] # just for convenience (think "self")

me.database_connection_string = database_connection_string

# change 'echo' to print each SQL query (for debugging/optimizing/the 
curious)
me.engine = create_engine(me.database_connection_string, echo=False)

me.metadata = MetaData()
me.metadata.bind = me.engine
me.Base = declarative_base(bind=me.engine)
me.Session = scoped_session(sessionmaker(bind=me.engine, autocommit=True,
                                                    
 expire_on_commit=expire_on_commit))

Cheers, Brian

On Wednesday, May 20, 2015 at 12:51:36 PM UTC-4, Michael Bayer wrote:
>
>  
>
> On 5/20/15 12:09 PM, Brian Cherinka wrote:
>  
> Hi,  
>
>  I've built a postgresql function that takes as input a row from a table, 
> and returns the sum of a particular column (of type array) between two 
> specified indices.  Here is how I've defined my function
>
>   CREATE OR REPLACE FUNCTION specres_sum_segment(cube datadb.cube, index1 
> integer, index2 integer) RETURNS numeric
>      LANGUAGE plpgsql STABLE
>      AS $$
>  
>   DECLARE result numeric;
>  BEGIN
>   select sum(f) from unnest(cube.specres[index1:index2]) as f into result;
>   return result;
>  END; $$;
>  
>      
>  and here is how it works in psql.  
>
>  select c.pk from datadb.cube as c where(specres_sum_segment(c,2000,2005) 
> < 12000);
>
>
>  This works and returns the cube entries where this condition is true. 
>  Now I'm trying to call this function with an SQLalchemy query.  I've 
> mapped a DeclarativeMeta class called Cube to my datadb.cube table, but 
> when I try to run my session query I'm getting an error.   
>
>  My sqlalchemy session query is 
>
>  
> session.query(datadb.Cube).filter(func.specres_sum_segment(datadb.Cube,2000,2005)==
>  
> 12000).all()
>
>
>  but I get the error
>
>  ProgrammingError: (psycopg2.ProgrammingError) can't adapt type 
> 'DeclarativeMeta'
>
>  sounds like your use of declarative is incorrect, please share the means 
> by which the Cube class is declared as well as its base.
>
>
>
>
>  
>  What is the right syntax to use when passing a mapped SQLalchemy class 
> into a function so postgresql will understand it?  I'm using SQLalchemy 
> 1.0.0 and PostgreSQL 9.3.  Any help would be appreciated.  Thanks.  
>
>  Cheers, Brian
>
>      
>  -- 
> You received this message because you are subscribed to the Google Groups 
> "sqlalchemy" group.
> To unsubscribe from this group and stop receiving emails from it, send an 
> email to sqlalchemy+...@googlegroups.com <javascript:>.
> To post to this group, send email to sqlal...@googlegroups.com 
> <javascript:>.
> Visit this group at http://groups.google.com/group/sqlalchemy.
> For more options, visit https://groups.google.com/d/optout.
>
>
>  

-- 
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to sqlalchemy+unsubscr...@googlegroups.com.
To post to this group, send email to sqlalchemy@googlegroups.com.
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to