diff options
| author | Jordan Cook <JWCook@users.noreply.github.com> | 2022-04-17 13:44:29 -0500 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-04-17 13:44:29 -0500 |
| commit | 451b5dfca5b3c60dd52098902ce37125d4a1a45f (patch) | |
| tree | b25b7dcc56b80fa6e53a496c2ca1c4a543211629 /requests_cache/backends/sqlite.py | |
| parent | 166f5690fb8d5b067f839fa8ffb9421cf1b8a7e7 (diff) | |
| parent | 613de4e1bb379d922cb7bd6c703fc81762f5d3bc (diff) | |
| download | requests-cache-451b5dfca5b3c60dd52098902ce37125d4a1a45f.tar.gz | |
Merge pull request #585 from JWCook/docs
Move backend docs from rST docstings to MyST markdown files in user guide
Diffstat (limited to 'requests_cache/backends/sqlite.py')
| -rw-r--r-- | requests_cache/backends/sqlite.py | 83 |
1 files changed, 1 insertions, 82 deletions
diff --git a/requests_cache/backends/sqlite.py b/requests_cache/backends/sqlite.py index 7be83d4..fa75848 100644 --- a/requests_cache/backends/sqlite.py +++ b/requests_cache/backends/sqlite.py @@ -1,86 +1,5 @@ -""" -.. image:: - ../_static/sqlite.png - -`SQLite <https://www.sqlite.org/>`_ is a fast and lightweight SQL database engine that stores data -either in memory or in a single file on disk. - -Use Cases -^^^^^^^^^ -Despite its simplicity, SQLite is a powerful tool. For example, it's the primary storage system for -a number of common applications including Dropbox, Firefox, and Chrome. It's well suited for -caching, and requires no extra configuration or dependencies, which is why it's the default backend -for requests-cache. - -Cache Files -^^^^^^^^^^^ -* See :ref:`files` for general info on specifying cache paths -* If you specify a name without an extension, the default extension ``.sqlite`` will be used - -In-Memory Caching -~~~~~~~~~~~~~~~~~ -SQLite also supports `in-memory databases <https://www.sqlite.org/inmemorydb.html>`_. -You can enable this (in "shared" memory mode) with the ``use_memory`` option: - - >>> session = CachedSession('http_cache', use_memory=True) - -Or specify a memory URI with additional options: - - >>> session = CachedSession(':file:memdb1?mode=memory') - -Or just ``:memory:``, if you are only using the cache from a single thread: - - >>> session = CachedSession(':memory:') - -Performance -^^^^^^^^^^^ -When working with average-sized HTTP responses (< 1MB) and using a modern SSD for file storage, you -can expect speeds of around: - -* Write: 2-8ms -* Read: 0.2-0.6ms - -Of course, this will vary based on hardware specs, response size, and other factors. - -Concurrency -^^^^^^^^^^^ -SQLite supports concurrent access, so it is safe to use from a multi-threaded and/or multi-process -application. It supports unlimited concurrent reads. Writes, however, are queued and run in serial, -so if you need to make large volumes of concurrent requests, you may want to consider a different -backend that's specifically made for that kind of workload, like :py:class:`.RedisCache`. - -Hosting Services and Filesystem Compatibility -^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -There are some caveats to using SQLite with some hosting services, based on what kind of storage is -available: - -* NFS: - * SQLite may be used on a NFS, but is usually only safe to use from a single process at a time. - See the `SQLite FAQ <https://www.sqlite.org/faq.html#q5>`_ for details. - * PythonAnywhere is one example of a host that uses NFS-backed storage. Using SQLite from a - multiprocess application will likely result in ``sqlite3.OperationalError: database is locked``. -* Ephemeral storage: - * Heroku `explicitly disables SQLite <https://devcenter.heroku.com/articles/sqlite3>`_ on its dynos. - * AWS `EC2 <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/InstanceStorage.html>`_, - `Lambda (depending on configuration) <https://aws.amazon.com/blogs/compute/choosing-between-aws-lambda-data-storage-options-in-web-apps/>`_, - and some other AWS services use ephemeral storage that only persists for the lifetime of the - instance. This is fine for short-term caching. For longer-term persistance, you can use an - `attached EBS volume <https://docs.aws.amazon.com/AWSEC2/latest/UserGuide/ebs-attaching-volume.html>`_. - -Connection Options -^^^^^^^^^^^^^^^^^^ -The SQLite backend accepts any keyword arguments for :py:func:`sqlite3.connect`. These can be passed -via :py:class:`.CachedSession`: - - >>> session = CachedSession('http_cache', timeout=30) - -Or via :py:class:`.SQLiteCache`: - - >>> backend = SQLiteCache('http_cache', timeout=30) - >>> session = CachedSession(backend=backend) +"""SQLite cache backend. For usage details, see :ref:`Backends: SQLite <sqlite>`. -API Reference -^^^^^^^^^^^^^ .. automodsumm:: requests_cache.backends.sqlite :classes-only: :nosignatures: |
