Skip to main content

Python

Databend offers the following Python packages enabling you to develop Python applications that interact with Databend:

  • databend-py (Recommended): Provides a direct interface to the Databend database. It allows you to perform standard Databend operations such as user login, database and table creation, data insertion/loading, and querying.
  • databend-sqlalchemy: Provides a SQL toolkit and Object-Relational Mapping to interface with the Databend database. SQLAlchemy is a popular SQL toolkit and ORM for Python, and databend-SQLAlchemy is a dialect for SQLAlchemy that allows you to use SQLAlchemy to interact with Databend.

Both packages require Python version 3.5 or higher. To check your Python version, run python --version in your command prompt. To install the latest databend-py or databend-sqlalchemy package:

# install databend-py
pip install databend-py

# install databend-sqlalchemy
pip install databend-sqlalchemy

Data Type Mappings

This table illustrates the correspondence between Databend general data types and their corresponding Python equivalents:

DatabendPython
BOOLEANbool
TINYINTint
SMALLINTint
INTint
BIGINTint
FLOATfloat
DOUBLEfloat
DECIMALdecimal.Decimal
DATEdatetime.date
TIMESTAMPdatetime.datetime
VARCHARstr
BINARYbytes

This table illustrates the correspondence between Databend semi-structured data types and their corresponding Python equivalents:

DatabendPython
ARRAYlist
TUPLEtuple
MAPdict
VARIANTstr
BITMAPstr
GEOMETRYstr

In the following tutorial, you'll learn how to utilize the packages above to develop your Python applications. The tutorial will walk you through creating a SQL user in Databend and then writing Python code to create a table, insert data, and perform data queries.

Tutorial-1: Integrating with Databend using Python

Before you start, make sure you have successfully installed a local Databend. For detailed instructions, see Local and Docker Deployments.

Step 1. Prepare a SQL User Account

To connect your program to Databend and execute SQL operations, you must provide a SQL user account with appropriate privileges in your code. Create one in Databend if needed, and ensure that the SQL user has only the necessary privileges for security.

This tutorial uses a SQL user named 'user1' with password 'abc123' as an example. As the program will write data into Databend, the user needs ALL privileges. For how to manage SQL users and their privileges, see User & Role.

CREATE USER user1 IDENTIFIED BY 'abc123';
GRANT ALL on *.* TO user1;

Step 2. Configuring Connection String (for databend-py)

databend-py supports various parameters that can be configured either as URL parameters or as properties passed to the Client. The two examples provided below demonstrate equivalent ways of setting these parameters for the common DSN:

Example 1: Using URL parameters

# Format: <schema>://<username>:<password>@<host_port>/<database>?<connection_params>
client = Client.from_url('http://root@localhost:8000/db?secure=False&copy_purge=True&debug=True')

Example 2: Using Client parameters

client = Client(
host='tenant--warehouse.ch.datafusecloud.com',
database="default",
user="user",
port="443",
password="password", settings={"copy_purge": True, "force": True})

To create a valid DSN, select appropriate connection parameters outlined here based on your requirements.

Step 3. Write a Python Program

In this step, you'll create a simple Python program that communicates with Databend. The program will involve tasks such as creating a table, inserting data, and executing data queries.

You will use the databend-py library to create a client instance and execute SQL queries directly.

  1. Install databend-py.
pip install databend-py
  1. Copy and paste the following code to the file main.py:
main.py
from databend_py import Client

# Connecting to a local Databend with a SQL user named 'user1' and password 'abc123' as an example.
# Feel free to use your own values while maintaining the same format.
# Setting secure=False means the client will connect to Databend using HTTP instead of HTTPS.
client = Client('user1:abc123@127.0.0.1', port=8000, secure=False)
client.execute("CREATE DATABASE IF NOT EXISTS bookstore")
client.execute("USE bookstore")
client.execute("CREATE TABLE IF NOT EXISTS booklist(title VARCHAR, author VARCHAR, date VARCHAR)")
client.execute("INSERT INTO booklist VALUES('Readings in Database Systems', 'Michael Stonebraker', '2004')")

_, results = client.execute("SELECT * FROM booklist")
for (title, author, date) in results:
print("{} {} {}".format(title, author, date))
client.execute('drop table booklist')
client.execute('drop database bookstore')

# Close Connect.
client.disconnect()
  1. Run python main.py:
Readings in Database Systems Michael Stonebraker 2004

Tutorial-2: Integrating with Databend Cloud using Python (databend-py)

Before you start, make sure you have successfully created a warehouse and obtained the connection information. For how to do that, see Connecting to a Warehouse.

Step 1. Install Dependencies with pip

pip install databend-py

Step 2. Connect with databend-py

from databend_py import Client

client = Client.from_url(f"databend://{USER}:{PASSWORD}@${HOST}:443/{DATABASE}?&warehouse={WAREHOUSE_NAME}&secure=True)
client.execute('DROP TABLE IF EXISTS data')
client.execute('CREATE TABLE if not exists data (x Int32,y VARCHAR)')
client.execute('DESC data')
client.execute("INSERT INTO data (Col1,Col2) VALUES ", [1, 'yy', 2, 'xx'])
_, res = client.execute('select * from data')
print(res)

Tutorial-3: Integrating with Databend Cloud using Python (databend-sqlalchemy)

Before you start, make sure you have successfully created a warehouse and obtained the connection information. For how to do that, see Connecting to a Warehouse.

Step 1. Install Dependencies with pip

pip install databend-sqlalchemy

Step 2. Connect with Databend SQLAlchemy

from databend_sqlalchemy import connector

cursor = connector.connect(f"databend://{USER}:{PASSWORD}@${HOST}:443/{DATABASE}?&warehouse={WAREHOUSE_NAME}).cursor()
cursor.execute('DROP TABLE IF EXISTS data')
cursor.execute('CREATE TABLE IF NOT EXISTS data( Col1 TINYINT, Col2 VARCHAR )')
cursor.execute("INSERT INTO data (Col1,Col2) VALUES ", [1, 'yy', 2, 'xx'])
cursor.execute("SELECT * FROM data")
print(cursor.fetchall())
tip

Replace {USER}, {PASSWORD}, {HOST}, {WAREHOUSE_NAME} and {DATABASE} in the code with your connection information. For how to obtain the connection information, see Connecting to a Warehouse.