On 19/07/11 14:18, M.-A. Lemburg wrote: > Daniele Varrazzo wrote: [snip] > While this is a nice system, it's also very slow. It uses function > calls and string parsing/conversion for adapting each value. This > works if you only have to insert/fetch a few rows, but won't be > feasible for larger volumes.
It depends on the backend, too. Sincerely when I need to load hudreds of thousands of rows I just avoid INSERT and go directly for mechanisms like PostgreSQL COPY. INSERT is (usually) so slooow that the drivers doesn't add that much overhead. > I think we need something more low-level, which tries to > avoid (Python) function calls if possible, e.g. it should be > possible to write adapters in C and only point to them using > a symbol (sketching here): > > cursor.setinputconverter(BINARY, module.BINARY_INPUT_CONVERTER) > cursor.setoutputconverter(BINARY, module.BINARY_OUTPUT_CONVERTER) > > For mxODBC we'd then use something like this: > > # Convert Python unicode object data to SQLWCHAR data > cursor.setinputconverter(unicode, module.SQLWCHAR_INPUT_CONVERTER) > > # Convert SQL_WCHAR type code data to Python unicode > cursor.setoutputconverter(SQL.WCHAR, module.SQLCHAR_OUTPUT_CONVERTER_UNICODE) > > The advantage here is that the database module could work > directly on the internal data structure to implement > the conversion rather than having to round-trip to Python. But the disavantage is that you can't easily work with composite types where you need to convert the primitive types and pack them into the composite (arrays, geographic data, ...) while adapt() is perfect for nested types. Anyway, happy that the discussion started :) federico -- Federico Di Gregorio federico.digrego...@dndg.it Studio Associato Di Nunzio e Di Gregorio http://dndg.it I porcellini di terra sono davvero Crostacei! Non lo sapevo! Certo che sono crostacei, hanno la crosta! Allora la pizza รจ un crostaceo?! -- discorso all'ESC2k07 _______________________________________________ DB-SIG maillist - DB-SIG@python.org http://mail.python.org/mailman/listinfo/db-sig