i have another approach, which may or may not serve you. All those '?' are bindparams, and one can eventualy get them printed with their names - and put names where there aren't. that's what i needed, i guess replacing names with values would be easy job. the code is part of tests/convertertest.py of sqlalchemyAggregator, http://dev.gafol.net/t/aggregator/ or http://dbcook.svn.sourceforge.net/viewvc/dbcook/trunk/dbcook/misc/aggregator/
class T_mark( unittest.TestCase): ... def setUp( self): self.m = MetaData() #hack for better visibility def bp( self,bindparam): if bindparam.value is not None: return 'const('+repr(bindparam.value)+')' k = bindparam.key if k.startswith( Converter._pfx): #my own bindparams k = k[ len( Converter._pfx):] return 'BindParam('+k+')' self.old_bp = DefaultCompiler._truncate_bindparam DefaultCompiler._truncate_bindparam = bp def tearDown( self): DefaultCompiler._truncate_bindparam = self.old_bp ... str(expression) then does things like :const(True) AND :BindParam(oid) = movies.id tags.tabl = :const('movies') AND tags.oid = :BindParam(oid) there's some more stuff going on there around compatibility with SA 0.3--0.5, but that's core. ciao svil On Wednesday 15 October 2008 13:33:46 King Simon-NFHD78 wrote: > > -----Original Message----- > > From: sqlalchemy@googlegroups.com > > [mailto:[EMAIL PROTECTED] On Behalf Of alex bodnaru > > Sent: 15 October 2008 11:00 > > To: SQLAlchemy > > Subject: [sqlalchemy] how to print a constructed query with > > it's parameters? > > > > > > hello friends, > > > > in order to debug my code, i wish to print my query sql. > > > > it's in the fashion of > > query = > > table.query().filter(table.code='XL').filter(table.name.like(' > > %'+q+'%') > > with unicode parameters. > > > > by just printing query, i get the select with ? parameters, but > > not the additional parameters list, that contains ['XL', > > %q-value%]. since it doesn't presently work ok, i'd like to print > > the list as well. > > > > thanks in advance, > > alex > > This question comes up a lot. For example, see > http://groups.google.com/group/sqlalchemy/browse_thread/thread/a060 >2ede8 18f55c7 > > Firstly, if you use echo=True in your call to create_engine, all > SQL will be printed to stdout. The parameters will be displayed as > a list AFTER the SQL is printed. > > Eg. (from http://www.sqlalchemy.org/docs/05/ormtutorial.html) > > BEGIN > INSERT INTO users (name, fullname, password) VALUES (?, ?, ?) > ['ed', 'Ed Jones', 'edspassword'] > SELECT users.id AS users_id, users.name AS users_name, > users.fullname AS users_fullname, users.password AS users_password > FROM users > WHERE users.name = ? > LIMIT 1 OFFSET 0 > ['ed'] > > You can control the logging more finely using the logging module - > see > http://www.sqlalchemy.org/docs/05/dbengine.html#dbengine_logging > for more details. > > The problem is that SQLAlchemy doesn't ever replace those '?' > characters with the actual parameter values. Those strings are > passed directly to the DBAPI driver, along with the list of > parameter values. It is then up to the DBAPI driver how it passes > the query to the database. (This is why SQLAlchemy is fairly safe > from SQL Injection attacks). > > Hope that helps, > > Simon > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---