This document describes how to use SQLAlchemy, a Python SQL tool and object-relational mapping (ORM) tool, with YugabetyDB.
Prerequisites
- 
YugabyteDB version 2.6 or later (see YugabyteDB Quick Start Guide). 
- 
Python version 2.7 or later. 
- 
The latest version of SQLAlchemy, which you can install using pip by executing the following command: pip3 install sqlalchemyVerify the installation as follows: - 
Open the Python prompt by executing the following command: python3
- 
From the Python prompt, execute the following commands to check the SQLAlchemy version: import sqlalchemysqlalchemy.version
 
- 
- 
Psycopg2, the PostgreSQL database adapter for Python, which you can install using pip by executing the following command: pip3 install psycopg2Alternatively, you can install psycopg2-binary, a pre-compiled version of the module, by executing the following command: pip3 install psycopg2-binary
Use SQLAlchemy
Start using SQLAlchemy with YugabyteDB as follows:
- 
Create a demo project and add a main.pyandconfig.pyfiles to it.
- 
Add the following code to the config.pyfile:db_user = 'yugabyte' db_password = 'yugabyte' database = 'yugabyte' db_host = 'localhost' db_port = 5433
- 
Add the following code to the main.pyfile:import config as cfg from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker, relationship from sqlalchemy import create_engine from sqlalchemy import MetaData from sqlalchemy import Table, Column, Integer, String, DateTime, ForeignKey Base = declarative_base() class Test(Base): __tablename__ = 'test' id = Column(Integer, primary_key=True) name = Column(String(255), unique=True, nullable=False) # create connection engine = create_engine('postgresql://{0}:{1}@{2}:{3}/{4}'.format(cfg.db_user, cfg.db_password, cfg.db_host, cfg.db_port, cfg.database)) # create metadata Base.metadata.create_all(engine) # create session Session = sessionmaker(bind=engine) session = Session() # insert data tag_1 = Test(name='Bob') tag_2 = Test(name='John') tag_3 = Test(name='Ivy') session.add_all([tag_1, tag_2, tag_3]) session.commit()
- 
Execute the code using the following command: python3 main.py
Test the code
Verify the code execution by looking for the changes inside the database as follows:
- 
Navigate to your YugabyteDB installation directory by running the following command: cd /<path-to-yugabytedb>
- 
Run the ysqlsh client by executing the following command: ./bin/ysqlsh
- 
Obtain the list of all the tables in the database by executing the following command: \dt
- 
Check if rows have been inserted into the table by executing the following: SELECT * FROM TEST;The output should be as follows: id | name ---+-------- 1 | Bob 2 | John 3 | Ivy (3 rows)
Limitations
Consider the following limitations:
- Because of the distributed nature of YugabyteDB, rows returned by a query might not be in sequential or expected order. It is, therefore, recommended that you use the orderby()function to avoid the wrong data when executing functions such asfirst().
- YugabyteDB does not support columns that contain a PRIMARY KEYof typeuser_defined_type.