1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117
|
.. currentmodule:: psycopg
COPY-related objects
====================
The main objects (`Copy`, `AsyncCopy`) present the main interface to exchange
data during a COPY operations. These objects are normally obtained by the
methods `Cursor.copy()` and `AsyncCursor.copy()`; however, they can be also
created directly, for instance to write to a destination which is not a
database (e.g. using a `~psycopg.copy.FileWriter`).
See :ref:`copy` for details.
Main Copy objects
-----------------
.. autoclass:: Copy()
The object is normally returned by `!with` `Cursor.copy()`.
.. automethod:: write_row
The data in the tuple will be converted as configured on the cursor;
see :ref:`adaptation` for details.
.. automethod:: write
.. automethod:: read
Instead of using `!read()` you can iterate on the `!Copy` object to
read its data row by row, using ``for row in copy: ...``.
.. automethod:: rows
Equivalent of iterating on `read_row()` until it returns `!None`
.. automethod:: read_row
.. automethod:: set_types
.. autoclass:: AsyncCopy()
The object is normally returned by ``async with`` `AsyncCursor.copy()`.
Its methods are similar to the ones of the `Copy` object but offering an
`asyncio` interface (`await`, `async for`, `async with`).
.. automethod:: write_row
.. automethod:: write
.. automethod:: read
Instead of using `!read()` you can iterate on the `!AsyncCopy` object
to read its data row by row, using ``async for row in copy: ...``.
.. automethod:: rows
Use it as `async for record in copy.rows():` ...
.. automethod:: read_row
.. _copy-writers:
Writer objects
--------------
.. currentmodule:: psycopg.copy
.. versionadded:: 3.1
Copy writers are helper objects to specify where to write COPY-formatted data.
By default, data is written to the database (using the `LibpqWriter`). It is
possible to write copy-data for offline use by using a `FileWriter`, or to
customize further writing by implementing your own `Writer` or `AsyncWriter`
subclass.
Writers instances can be used passing them to the cursor
`~psycopg.Cursor.copy()` method or to the `~psycopg.Copy` constructor, as the
`!writer` argument.
.. autoclass:: Writer
This is an abstract base class: subclasses are required to implement their
`write()` method.
.. automethod:: write
.. automethod:: finish
.. autoclass:: LibpqWriter
This is the writer used by default if none is specified.
.. autoclass:: FileWriter
This writer should be used without executing a :sql:`COPY` operation on
the database. For example, if `records` is a list of tuples containing
data to save in COPY format to a file (e.g. for later import), it can be
used as:
.. code:: python
with open("target-file.pgcopy", "wb") as f:
with Copy(cur, writer=FileWriter(f)) as copy:
for record in records
copy.write_row(record)
.. autoclass:: AsyncWriter
This class methods have the same semantics of the ones of `Writer`, but
offer an async interface.
.. automethod:: write
.. automethod:: finish
.. autoclass:: AsyncLibpqWriter
|