=======================
Using the Python SDK
=======================
The Couchbase Python SDK library allows you to connect to a Couchbase cluster from Python.
The Python SDK uses the high-performance C++ library, Couchbase++, to handle communicating to the cluster over the Couchbase binary protocol.
Useful Links
=======================
* :python_sdk_github:`Source <>`
* :python_sdk_jira:`Bug Tracker <>`
* :python_sdk_docs:`Python docs on the Couchbase website <>`
* :python_sdk_release_notes:`Release Notes <>`
* :python_sdk_compatibility:`Compatibility Guide <>`
* :couchbase_dev_portal:`Couchbase Developer Portal <>`
How to Engage
=======================
* :couchbase_discord:`Join Discord and contribute <>`.
The Couchbase Discord server is a place where you can collaborate about all things Couchbase.
Connect with others from the community, learn tips and tricks, and ask questions.
* Ask and/or answer questions on the :python_sdk_forums:`Python SDK Forums <>`.
Installing the SDK
=======================
.. note::
Best practice is to use a Python virtual environment such as venv or pyenv.
Checkout:
* Linux/MacOS: `pyenv `_
* Windows: `pyenv-win `_
.. note::
The 4.0.2 release provides wheels for Windows, MacOS and Linux platforms (via manylinux) for Python 3.7 - 3.10.
Prereqs
++++++++++
If not on platform that has a binary wheel availble, the following is needed:
* Python version 3.7 - 3.10
* A C++ compiler supporting C++ 17
* CMake (version >= 3.18)
* Git (if not on a platform that offers wheels)
* OpenSSL 1.1.1
* If using the Twisted Framework and the txcouchbase API, Twisted >= 21.7.0 is required.
.. warning::
Some older linux platforms to not provide defaults (Python version, OpenSSL, C++ 17 support, etc.) that meet the Python SDK's minimum requirements. Be sure to update to the minimum requirements prior to installing the SDK.
See the `dockerfiles folder `_ in the Python SDK examples folder for references to working setups for various linux platforms.
After the above have been installed, pip install ``setuptools`` and ``wheel`` (see command below).
.. code-block:: console
$ python3 -m pip install --upgrade pip setuptools wheel
Install
++++++++++
.. code-block:: console
$ python3 -m pip install couchbase
Introduction
=======================
Connecting to a Couchbase cluster is as simple as creating a new ``Cluster`` instance to represent the ``Cluster``
you are using, and then using the ``bucket`` and ``collection`` commands against this to open a connection to open
your specific ``bucket`` and ``collection``. You are able to execute most operations immediately, and they will be
queued until the connection is successfully established.
Here is a simple example of creating a ``Cluster`` instance, retrieving a document and using SQL++ (a.k.a. N1QL).
.. code-block:: python
# needed for any cluster connection
from couchbase.auth import PasswordAuthenticator
from couchbase.cluster import Cluster
# options for a cluster and SQL++ (N1QL) queries
from couchbase.options import ClusterOptions, QueryOptions
# get a reference to our cluster
auth = PasswordAuthenticator('username', 'password')
cluster = Cluster.connect('couchbase://localhost', ClusterOptions(auth))
# get a reference to our bucket
cb = cluster.bucket('travel-sample')
# get a reference to the default collection
cb_coll = cb.default_collection()
# get a document
result = cb_coll.get('airline_10')
print(f'Document content: {result.content_as[dict]}')
# using SQL++ (a.k.a N1QL)
call_sign = 'CBS'
sql_query = 'SELECT VALUE name FROM `travel-sample` WHERE type = "airline" AND callsign = $1'
query_res = cluster.query(sql_query, QueryOptions(positional_parameters=[call_sign]))
for row in query_res:
print(f'Found row: {row}')
Source Control
=======================
The source control is available on :python_sdk_github:`Github <>`.
Once you have cloned the repository, you may contribute changes through our gerrit server.
For more details see :python_sdk_contribute:`CONTRIBUTING.md <>`.
License
=======================
The Couchbase Python SDK is licensed under the Apache License 2.0.
See :python_sdk_license:`LICENSE <>` for further details.