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

Reply via email to