Official InterSystems driver support using iris+intersystems://
URL
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-iris
Or 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:preview
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):
passdef 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