use keywordargs as dictionary, i.e.
...query.filter( **kwargs)
where the kwargs are a dict made by u containing only the required 
fields. e.g. 

kwargs={}
if foo_id: kwargs['fooid']=fooid
...
u can make it more generic (but more dangerous) by passing any kwargs 
coming to your func straight down to filter():

def myfunc( self, whateverotherstuff, **filterkwargs):
 .. query.filter( **filterkwargs)

or some combination inbetween.
dont forget that filter( ...) does AND of the criterias.

svil

On Tuesday 15 July 2008 14:55:01 Heston James - Cold Beans wrote:
> Good morning guys,
>
>
>
> I'm looking for a way in which I can query my database for records
> which meet multiple, optional arguments. I'm looking to encapsulate
> access to this using a service layer, I want to create a method
> like this:
>
>
>
>     def get_foos(self, foo_id="", foo_firstname="",
> foo_lastname=""):
>
>         foos = session.query(Foo).filter_by(foo_id=foo_id,
> foo_firstname=foo_firstname, foo_lastname=foo_lastname)
>
>
>
>         return foos
>
>
>
> Now, the thing I'm struggling with is how to make all those
> attributes optional. Because at the moment I call that method like
> so:
>
>
>
> get_foos(foo_id=2)
>
>
>
> I get no results returned because SQLAlchemy is looking for records
> that not only have an id of 2 but also have a first and last name
> which is an empty string.
>
>
>
> What I would ideally like to do is only have it filter by the
> arguments for getfoos() which are not empty strings. This would
> allow me to build a more reusable query method.
>
>
>
> Is this possible? And how would one achieve it?
>
>
>
> Cheers,
>
>
>
> Heston
>
>
> 


--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups 
"sqlalchemy" group.
To post to this group, send email to sqlalchemy@googlegroups.com
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to