mirror of
https://github.com/python/cpython.git
synced 2025-08-04 17:08:35 +00:00
gh-69093: Support basic incremental I/O to blobs in sqlite3
(GH-30680)
Authored-by: Aviv Palivoda <palaviv@gmail.com> Co-authored-by: Erlend E. Aasland <erlend.aasland@innova.no> Co-authored-by: palaviv <palaviv@gmail.com> Co-authored-by: Kumar Aditya <59607654+kumaraditya303@users.noreply.github.com> Co-authored-by: Jelle Zijlstra <jelle.zijlstra@gmail.com>
This commit is contained in:
parent
c9d41bcd68
commit
ee475430d4
16 changed files with 989 additions and 7 deletions
|
@ -394,6 +394,20 @@ Connection Objects
|
|||
supplied, this must be a callable returning an instance of :class:`Cursor`
|
||||
or its subclasses.
|
||||
|
||||
.. method:: blobopen(table, column, row, /, *, readonly=False, name="main")
|
||||
|
||||
Open a :class:`Blob` handle to the :abbr:`BLOB (Binary Large OBject)`
|
||||
located in row *row*, column *column*, table *table* of database *name*.
|
||||
When *readonly* is :const:`True` the blob is opened without write
|
||||
permissions.
|
||||
|
||||
.. note::
|
||||
|
||||
The blob size cannot be changed using the :class:`Blob` class.
|
||||
Use the SQL function ``zeroblob`` to create a blob with a fixed size.
|
||||
|
||||
.. versionadded:: 3.11
|
||||
|
||||
.. method:: commit()
|
||||
|
||||
This method commits the current transaction. If you don't call this method,
|
||||
|
@ -1088,6 +1102,58 @@ Exceptions
|
|||
transactions turned off. It is a subclass of :exc:`DatabaseError`.
|
||||
|
||||
|
||||
.. _sqlite3-blob-objects:
|
||||
|
||||
Blob Objects
|
||||
------------
|
||||
|
||||
.. versionadded:: 3.11
|
||||
|
||||
.. class:: Blob
|
||||
|
||||
A :class:`Blob` instance is a :term:`file-like object` that can read and write
|
||||
data in an SQLite :abbr:`BLOB (Binary Large OBject)`. Call ``len(blob)`` to
|
||||
get the size (number of bytes) of the blob.
|
||||
|
||||
.. method:: close()
|
||||
|
||||
Close the blob.
|
||||
|
||||
The blob will be unusable from this point onward. An
|
||||
:class:`~sqlite3.Error` (or subclass) exception will be raised if any
|
||||
further operation is attempted with the blob.
|
||||
|
||||
.. method:: read(length=-1, /)
|
||||
|
||||
Read *length* bytes of data from the blob at the current offset position.
|
||||
If the end of the blob is reached, the data up to
|
||||
:abbr:`EOF (End of File)` will be returned. When *length* is not
|
||||
specified, or is negative, :meth:`~Blob.read` will read until the end of
|
||||
the blob.
|
||||
|
||||
.. method:: write(data, /)
|
||||
|
||||
Write *data* to the blob at the current offset. This function cannot
|
||||
change the blob length. Writing beyond the end of the blob will raise
|
||||
:exc:`ValueError`.
|
||||
|
||||
.. method:: tell()
|
||||
|
||||
Return the current access position of the blob.
|
||||
|
||||
.. method:: seek(offset, origin=os.SEEK_SET, /)
|
||||
|
||||
Set the current access position of the blob to *offset*. The *origin*
|
||||
argument defaults to :data:`os.SEEK_SET` (absolute blob positioning).
|
||||
Other values for *origin* are :data:`os.SEEK_CUR` (seek relative to the
|
||||
current position) and :data:`os.SEEK_END` (seek relative to the blob’s
|
||||
end).
|
||||
|
||||
:class:`Blob` example:
|
||||
|
||||
.. literalinclude:: ../includes/sqlite3/blob.py
|
||||
|
||||
|
||||
.. _sqlite3-types:
|
||||
|
||||
SQLite and Python types
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue