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:
fromsqlalchemyimportcreate_engineengine=create_engine("iris://_SYSTEM:SYS@localhost:1972/USER")To use with Python Embedded mode, when run next to IRIS
fromsqlalchemyimportcreate_engineengine=create_engine("iris+emb:///USER")To use with InterSystems official driver, does not work in Python Embedded mode
fromsqlalchemyimportcreate_engineengine=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:previewfromsqlalchemyimportColumn, MetaData, Table, selectfromsqlalchemy.sql.sqltypesimportInteger, UUIDfromsqlalchemy_irisimportIRISVectorfromsqlalchemyimportcreate_enginefromsqlalchemy.ormimportDeclarativeBaseimportuuidDATABASE_URL="iris://_SYSTEM:SYS@localhost:1972/USER"engine=create_engine(DATABASE_URL, echo=False) # Create a table metadatametadata=MetaData() defmain(): 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) withengine.connect() asconn: 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