User Guide¶
Welcome to SQLAlchemy-Exasol¶
SQLAlchemy-Exasol is a dialect extension for SQLAlchemy, implementing support for Exasol databases. The provided dialect is based on PyExasol, which relies on the Websocket-client API.
Note
For more details on SQLAlchemy, please consult its general documentation and dialect-specific documentation.
Getting Started¶
For pre-requisites, installing sqlalchemy-exasol, and creating your first connection, please see our Getting Started guide.
Diving Deeper¶
For information on parameters for your connection, see Configuration.
For details on what features are available, see Features.
Coded examples are provided in Examples.
With SQLAlchemy 2.x, there are more options regarding sessions and how commits behave within those, it is recommended to check out the Session Transaction page and adapt your code according to the best practices.
General Tips¶
Always use lowercase identifiers for schema, table, and column names. SQLAlchemy treats lowercase identifiers as case-insensitive. The dialect takes care of transforming the identifier into a case-insensitive representation for the specific database. In the case of Exasol, this is uppercase.
Known Limitations¶
Note
Running into an error with a specific SQLAlchemy example? Our Exasol dialect may already be handling that for you! Check out our Features for a full breakdown of what is automated.
In some cases, we might be able to provide new features or solutions for these limitations. Please feel free to reach out by creating a GitHub issue.
For technical difficulties, please submit a request via the Exasol Support Portal.
Insert
SQLAlchemy is slower than other drivers at performing multiple entry inserts. It is recommended to use PyExasol or the native Exasol IMPORT statement instead.
Inserting multiple empty rows via prepared statements does not work in all cases.
As shown in Working with Multiple Entries, some SQLAlchemy functions which implicitly rely on RETURNING will not work, as the Exasol dialect does not support RETURNING. This example shows how to successfully work around that.