You can get the column object from the string, using:

xyz.c[column_name]

Do you mean that this:

columns = [a,b,c]
operators = ['+','-']

should result in xyz.c.a + xyz.c.b - xyz.c.c ?

To do that, something like this works:

columns = [a,b,c]
operators = ['+','-']
colnames_and_ops = zip(columns[1:], operators)
import operator
opdict = {
    '+' : operator.add,
    '-' : operator.sub
}
columns = [xyz.c[name] for name in columns]
operators = [opdict[name] for name in operators]
ops_cols = zip(operators, columns[1:])
expr = reduce(lambda expr, op_col: op_col[0](expr, op_col[1]), ops_cols,
columns[0])

Hope that helps,

    - Gulli



On Thu, Feb 26, 2009 at 5:47 AM, Ashish Bhatia
<ashishsinghbha...@gmail.com>wrote:

>
> This works fine
> But in the mine case
> columns = [a,b,c]
> operator = ['+','-']
>
> comes in the list
>
> And it can go to n number.
>
> So while adding it creates a problem
>
> My approach
>
> looping on columns i append it in to the table and hence making the
> object
>
> i can join them with operator to form the a+b-c but in this a b c
> becomes string which is not desirable  i want object here
>
> i hope this will clear the picture
>
> On Feb 25, 6:40 pm, Gunnlaugur Thor Briem <gunnlau...@gmail.com>
> wrote:
> > You can sum the column objects directly, a+b, producing a
> > sqlalchemy.sql.expression._BinaryExpression object.
> >
> > t = Table('bobloblaw', MetaData(), Column('a', Integer), Column('b',
> > Integer), Column('c', Integer))
> > t.c.a + t.c.b
> > # evaluates to <sqlalchemy.sql.expression._BinaryExpression object at
> > 0x1ec9ff0>
> > print t.c.a + t.c.b
> > #  bobloblaw.a + bobloblaw.b
> >
> > On Wed, Feb 25, 2009 at 1:25 PM, Ashish Bhatia
> > <ashishsinghbha...@gmail.com>wrote:
> >
> >
> >
> > > The problem is still their.
> >
> > > The two seprate list of
> > > columns = List of sqlalchem object
> > > operator = ['+'','-']
> >
> > > using join to join them will convert the columns object to string
> > > which is not desirable.
> >
> > > Any way to fix this.
> >
> > > On Feb 25, 3:54 pm, Ashish Bhatia <ashishsinghbha...@gmail.com> wrote:
> > > > sorry its resolved and working
> >
> > > > On Feb 25, 12:20 pm, Ash <ashishsinghbha...@gmail.com> wrote:
> >
> > > > > Hello ,
> >
> > > > > I am trying to make query like
> >
> > > > > select (a+b) from xyz;
> >
> > > > > to do this
> >
> > > > > xyz = sqlalchemy.Table('xyz',metadata)
> >
> > > > > a = sqlalchemy.Column('a', sqlalchemy.Integer)
> > > > > xyz.append_column(a)
> > > > > b = sqlalchemy.Column('b', sqlalchemy.Integer)
> > > > > xyz.append_column(b)
> >
> > > > > column = [(a + b)]
> > > > > select = sqlalchemy.select(from_obj=xyz,
> columns=column,distinct=True)
> >
> > > > > This works fine for me.
> >
> > > > > Now when the columns a and b are dynamic (Enter by the user in form
> of
> > > > > string) and the operator too comes from user
> >
> > > > > columns_list = ['a','b']
> > > > > operator = ['+']
> >
> > > > > like this i get the input
> >
> > > > > so i make the loop and make
> >
> > > > > for both the columns something like this
> > > > > columns = []
> > > > > for x in column_list :
> > > > >     t  = sqlalchemy.Column(x, sqlalchemy.Integer)
> > > > >     xyz.append_column(a)
> > > > >     columns.append(t)
> >
> > > > > so now
> > > > > how to add + to make the quer run
> >
> > > > > Thanks in the advance.
> >
>

--~--~---------~--~----~------------~-------~--~----~
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 
sqlalchemy+unsubscr...@googlegroups.com
For more options, visit this group at 
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---

Reply via email to