This tutorial shows you how build a simple Python application with CockroachDB using a PostgreSQL-compatible driver or ORM.
We have tested the Python psycopg2 driver and the SQLAlchemy ORM enough to claim beta-level support, so those are featured here. If you encounter problems, please open an issue with details to help us make progress toward full support.
Before you begin
- Install CockroachDB.
- Start up a secure or insecure local cluster.
- Choose the instructions that correspond to whether your cluster is secure or insecure:
Step 1. Install the psycopg2 driver
To install the Python psycopg2 driver, run the following command:
$ pip install psycopg2
For other ways to install psycopg2, see the official documentation.
basic-sample.py
file, or create the file yourself and copy the code into it. {% include copy-clipboard.html %} ~~~ python {% include {{page.version.version}}/app/basic-sample.py %} ~~~ Then run the code: {% include copy-clipboard.html %} ~~~ shell $ python basic-sample.py ~~~ The output should be: ~~~ Initial balances: ['1', '1000'] ['2', '250'] ~~~ ### Transaction (with retry logic) Next, use the following code to again connect as the `maxroach` user but this time execute a batch of statements as an atomic transaction to transfer funds from one account to another, where all included statements are either committed or aborted. Download the
txn-sample.py
file, or create the file yourself and copy the code into it. {{site.data.alerts.callout_info}}CockroachDB may require the
client to retry a transaction in case of read/write contention. CockroachDB provides a generic
retry function that runs inside a transaction and retries it as needed. You can copy and paste the retry function from here into your code.{{site.data.alerts.end}} {% include copy-clipboard.html %} ~~~ python {% include {{page.version.version}}/app/txn-sample.py %} ~~~ Then run the code: {% include copy-clipboard.html %} ~~~ shell $ python txn-sample.py ~~~ The output should be: ~~~ Balances after transfer: ['1', '900'] ['2', '350'] ~~~ To verify that funds were transferred from one account to another, start the [built-in SQL client](use-the-built-in-sql-client.html): {% include copy-clipboard.html %} ~~~ shell $ cockroach sql --certs-dir=certs --database=bank ~~~ To check the account balances, issue the following statement: {% include copy-clipboard.html %} ~~~ sql > SELECT id, balance FROM accounts; ~~~ ~~~ +----+---------+ | id | balance | +----+---------+ | 1 | 900 | | 2 | 350 | +----+---------+ (2 rows) ~~~
basic-sample.py
file, or create the file yourself and copy the code into it. {% include copy-clipboard.html %} ~~~ python {% include {{page.version.version}}/app/insecure/basic-sample.py %} ~~~ Then run the code: {% include copy-clipboard.html %} ~~~ shell $ python basic-sample.py ~~~ The output should be: ~~~ Initial balances: ['1', '1000'] ['2', '250'] ~~~ ### Transaction (with retry logic) Next, use the following code to again connect as the `maxroach` user but this time execute a batch of statements as an atomic transaction to transfer funds from one account to another, where all included statements are either committed or aborted. Download the
txn-sample.py
file, or create the file yourself and copy the code into it. {{site.data.alerts.callout_info}}CockroachDB may require the
client to retry a transaction in case of read/write contention. CockroachDB provides a generic
retry function that runs inside a transaction and retries it as needed. You can copy and paste the retry function from here into your code.{{site.data.alerts.end}} {% include copy-clipboard.html %} ~~~ python {% include {{page.version.version}}/app/insecure/txn-sample.py %} ~~~ Then run the code: {% include copy-clipboard.html %} ~~~ shell $ python txn-sample.py ~~~ The output should be: ~~~ Balances after transfer: ['1', '900'] ['2', '350'] ~~~ To verify that funds were transferred from one account to another, start the [built-in SQL client](use-the-built-in-sql-client.html): {% include copy-clipboard.html %} ~~~ shell $ cockroach sql --insecure --database=bank ~~~ To check the account balances, issue the following statement: {% include copy-clipboard.html %} ~~~ sql > SELECT id, balance FROM accounts; ~~~ ~~~ +----+---------+ | id | balance | +----+---------+ | 1 | 900 | | 2 | 350 | +----+---------+ (2 rows) ~~~
What's next?
Read more about using the Python psycopg2 driver.
You might also be interested in using a local cluster to explore the following CockroachDB benefits: