Thanks That is just the thing I needed. Can wait till the book comes out to learn even more.
As normal sqlalchemy can handle the task. I just need to learn something new about it. Michael Bayer wrote: > you should be able to use conn.execute(anystring, [list of dict]) just > fine. the only thing that wont work at the moment is autocommit so > youd have to run a begin()/commit() pair. > > to bring the string version of REPLACE into SQLAlchemy bind parameter > processing etc. use text() - the basic idea (havent tested this code, > may need tweaks) is this: > > def replace(table, keys): > statement = 'REPLACE INTO %s(%s) VALUES (%s)' % > ( > table.name, > ','.join(table.c[key].name for key in keys), > ','.join(":" + table.c[key] for key in keys)) > ) > return text(statement, bindparams=[bindparam(key, > type_=table.c[key].type) for key in keys]) > > trans = conn.begin() > conn.execute(replace(mytable, ['one', 'two', 'three']), [{'one':1, > 'two':2, 'three':3}, {...}, {...}, ...]) > trans.commit() > > On Jan 4, 2008, at 1:27 PM, Mike Bernson wrote: > > >> I have code that need to do a mysql replace instead of an insert. >> >> The quick hack to just create a string and execute has problems with >> quoting things, sql injection ... >> >> If a table.replace() is not easy to do is there a way to create a >> statement >> that works that way. If I could do a conn.execute(statement, [list of >> dict]) that >> would be great. >> >> The current code look like: >> table = mappings.TableForTag(setName) >> >> keys = sorted([str(k) for k in records[0].keys() if >> table.c.has_key((str(k)))]) >> statement = 'REPLACE INTO %s(%s) VALUES ' %(table.name, >> ','.join(["`%s`" % k for k in keys])) >> values = [] >> for record in records: >> values.append('(%s)' % ','.join(["'%s'" % str(record.get(k)) >> for k in keys])) >> values = ','.join(values) >> conn = engine.connect() >> conn.execute(statement + values) >> >> I would like to be able to do something like: >> >> table = mappings.TableForTag(setName) >> conn = engine.connect() >> conn.execute(table.replace(), records) >> >> >> >> > > > > > > --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---