On 11/19/2015 10:07 AM, Юрий Пайков wrote:
> But if I used bound parameters in a query - wouldn't it be a solution? 
> I mean, if a value for a bindparam is not inlined in a query and rather
> carried along - there is no need to quote it for the driver, is there?
> Like done for any other literal comparison, for example.
> The driver will insert it as is from some object/field  and won't parse
> the resulting query for params any further...

you can try a bindparam(), sure.    the original question, everything
under @compiles should return plain text, yes, those functions all need
to return text that is appended to the SQL statement.




> 
> четверг, 19 ноября 2015 г., 19:43:39 UTC+5 пользователь Michael Bayer
> написал:
> 
> 
> 
>     On 11/19/2015 05:29 AM, Юрий Пайков wrote:
>     > I based my code on the Michaeil Bayer's answer to this Stack Overflow
>     > question
>     >
>     <http://stackoverflow.com/questions/18858291/values-clause-in-sqlalchemy
>     
> <http://stackoverflow.com/questions/18858291/values-clause-in-sqlalchemy>>.
> 
>     > I extended it a little so it takes into account NULLs and ARRAY for
>     > Postgresql.
>     >
>     > |classvalues(FromClause):named_with_column
>     > =Truedef__init__(self,columns,*args,**kw):self._column_args =columns
>     > self.list =args self.alias_name =self.name <http://self.name>
>     > =kw.pop('alias_name',None)def_populate_column_collection(self):#
>     > self._columns.update((col.name <http://col.name>, col) for col in
>     self._column_args)forc
>     > inself._column_args:c._make_proxy(self,c.name
>     
> <http://c.name>)@compiles(values)defcompile_values(element,compiler,asfrom=False,**kw):columns
> 
>     > =element.columns v ="VALUES %s"%", ".join("(%s)"%",
>     >
>     
> ".join(((compiler.visit_array(elem)+'::'+str(column.type))ifisinstance(column.type,ARRAY)elsecompiler.render_literal_value(elem,column.type))ifelem
> 
>     >
>     isnotNoneelsecompiler.render_literal_value(elem,NULLTYPE)forelem,column
>     > inzip(tup,columns))fortup inelement.list
>     > )ifasfrom:ifelement.alias_name:v ="(%s) AS %s
>     > (%s)"%(v,element.alias_name,(", ".join(c.name <http://c.name> forc
>     > inelement.columns)))else:v ="(%s)"%v returnv|
>     >
>     > Everything worked fine until it turned out I couldn't insert
>     values with
>     > "%"-sign to this VALUES clause - they get inlined in a resulting
>     > statement and this seems to cause binding problems
>     >
>     > I guess if instead of |render_literal_value()| we used
>     |bindparam()| we
>     > could avoid such an error. But Everything under |@compiles| should
>     > return plain text, am I right?
>     >
>     >
>     > How could I amend this to get a query which contains bind parfms
>     along
>     > with it?
> 
>     if the issue is percent signs, this is a driver limitation and you need
>     to double them up as %%, so that they aren't confused as
>     format/pyformat
>     indicators.   psycopg2 uses format/pyformat style for bound parameters.
> 
> 
> 
>     >
>     > --
>     > 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 [email protected] <javascript:>
>     > <mailto:[email protected] <javascript:>>.
>     > To post to this group, send email to [email protected]
>     <javascript:>
>     > <mailto:[email protected] <javascript:>>.
>     > Visit this group at http://groups.google.com/group/sqlalchemy
>     <http://groups.google.com/group/sqlalchemy>.
>     > For more options, visit https://groups.google.com/d/optout
>     <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 [email protected]
> <mailto:[email protected]>.
> To post to this group, send email to [email protected]
> <mailto:[email protected]>.
> 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 [email protected].
To post to this group, send email to [email protected].
Visit this group at http://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.

Reply via email to