An InterSystems IRIS dialect for SQLAlchemy.
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-irisOr to use InterSystems official driver support
pip install sqlalchemy-iris[intersystems]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})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:previewfrom 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()
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