sqlalchemy-iris

InterSystems does not provide technical support for this project. Please contact its developer for the technical assistance.
5
5 reviews
0
Awards
1.4k
Views
0
IPM installs
6
6
Details
Releases (5)
Reviews (5)
Issues
Articles (2)
An InterSystems IRIS dialect for SQLAlchemy

What's new in this version

Official InterSystems driver support using iris+intersystems:// URL

sqlalchemy-iris

An InterSystems IRIS dialect for SQLAlchemy.

Pre-requisites

This dialect requires SQLAlchemy, InterSystems DB-API driver. They are specified as requirements so pip
will install them if they are not already in place. To install, just:

pip install sqlalchemy-iris

Or to use InterSystems official driver support

pip install sqlalchemy-iris[intersystems]

Usage

In your Python app, you can connect to the database via:

from sqlalchemy import create_engine
engine = create_engine("iris://_SYSTEM:SYS@localhost:1972/USER")

To use with Python Embedded mode, when run next to IRIS

from sqlalchemy import create_engine
engine = create_engine("iris+emb:///USER")

To use with InterSystems official driver, does not work in Python Embedded mode

from sqlalchemy import create_engine
engine = create_engine("iris+intersystems://_SYSTEM:SYS@localhost:1972/USER")

IRIS Cloud SQL requires SSLContext

url = engine.URL.create(
    drivername="iris",
    host=host,
    port=443,
    username='SQLAdmin',
    password=password,
    database='USER',
)

sslcontext = ssl.create_default_context(cafile="certificateSQLaaS.pem")

engine = create_engine(url, connect_args={"sslcontext": sslcontext})

InterSystems IRIS

You can run your instance of InterSystems IRIS Community Edition with Docker

docker run -d --name iris \
 -p 1972:1972 \
 -p 52773:52773 \
 -e IRIS_USERNAME=_SYSTEM \
 -e IRIS_PASSWORD=SYS \
 intersystemsdc/iris-community:preview

Examples

IRISVector

from sqlalchemy import Column, MetaData, Table, select
from sqlalchemy.sql.sqltypes import Integer, UUID
from sqlalchemy_iris import IRISVector
from sqlalchemy import create_engine
from sqlalchemy.orm import DeclarativeBase
import uuid

DATABASE_URL = "iris://_SYSTEM:SYS@localhost:1972/USER"
engine = create_engine(DATABASE_URL, echo=False)

Create a table metadata

metadata = MetaData()

class Base(DeclarativeBase):
pass

def main():
demo_table = Table(
"demo_table",
metadata,
Column("id", Integer, primary_key=True, autoincrement=True),
Column("uuid", UUID),
Column("embedding", IRISVector(item_type=float, max_items=3)),
)

demo_table.drop(engine, checkfirst=True)
demo_table.create(engine, checkfirst=True)
with engine.connect() as conn:
    conn.execute(
        demo_table.insert(),
        [
            {"uuid": uuid.uuid4(), "embedding": [1, 2, 3]},
            {"uuid": uuid.uuid4(), "embedding": [2, 3, 4]},
        ],
    )
    conn.commit()
    result = conn.execute(
        demo_table.select()
    ).fetchall()
    print("result", result)

main()

Port 1972 is used for binary communication (this driver, xDBC and so on), and 52773 is for web (Management Portal, IRIS based web-applications and API’s).

The System Management Portal is available by URL: http://localhost:52773/csp/sys/UtilHome.csp

Made with
Version
0.17.001 Mar, 2025
Category
Frameworks
Works with
InterSystems IRISInterSystems IRIS for Health
First published
25 Oct, 2022
Last edited
01 Mar, 2025
Last checked by moderator
15 Feb, 2025Works