alex bodnaru wrote: > hello friends, > > i wanted to do a few sql commands in a ddl construct, but i failed with: > > pysqlite2:dbapi2 warning: you can execute one statement at a time > > i'm not very familiar with python db layer, but i know sqlite may be invoked > specifically to execute one, or many statements divided by ';', so i suspect > it's specifically invoked for one statement. > > while this is a good security measure for sql from untrusted sources, like > user > input, it's quite annoying for a situation where free sql should be > specifically > added. > > as for my case, i had a batch of inserts based on an external file, > and i couldn't > invoke ddl.execute_at in a loop, so i had to switch to inserting a > batch of unioned > selects in one insert, which was nice to learn :).
The use case behind the DDL() construct is a single statement. You can fire multiple statements by using multiple DDL()s. But for inserts, I've found it more useful to write a 'after-create' event listener from scratch. Here's one that I use in pretty much every project, in some form or another: def fixture(table, column_names, *rows): """Insert data into table after creation.""" def onload(event, schema_item, connection): insert = table.insert() connection.execute( insert, [dict(zip(column_names, column_values)) for column_values in rows]) table.append_ddl_listener('after-create', onload) Looks like this in use: fixture(some_table, ('x', 'y'), (1, 2), (3, 4), (5, 6)) --~--~---------~--~----~------------~-------~--~----~ 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 -~----------~----~----~----~------~----~------~--~---