Skip to main content

sqlalchemy-seerdb

A SQLAlchemy dialect for the seerdb driver.

import sqlalchemy as sa

engine = sa.create_engine('oracle+seerdb://user:password@host:1521/?service_name=XE')

Why this exists

The SQL is nothing new — this inherits SQLAlchemy's built-in compiler, DDL and reflection wholesale and supplies only what is specific to this DBAPI. What it adds is reach.

seerdb speaks the wire protocol itself, in pure Python, with no vendor client libraries. The alternatives connect directly only to newer servers and fall back to loading vendor client libraries for anything older. So this dialect covers a range that otherwise needs a native client installed:

Server This dialect Direct connection elsewhere
8i, 9i, 10g, 11g yes no, needs vendor client libraries
12.1 and later yes yes

Verified against live servers: an 11g instance reports server_version_info == (11, 2, 0, 2, 0) and a current one reports (23, 1, 162, 0, 0), both over the same dialect.

If you are on a modern server and can install a native client, the dialects that ship with SQLAlchemy are the better-trodden path. This one is for the cases they do not reach.

Status

Early. Connections, Core select, DDL, parameter binding and reflection all work against live servers — has_table, get_columns, get_pk_constraint and autoload_with round-trip.

The current target is SQLAlchemy's dialect compliance suite. Progress is tracked under the SQLAlchemy conformance milestone.

Running the tests

The suite is SQLAlchemy's dialect compliance suite, which upstream names as the target for third-party dialects. It is entirely live-database driven — there is no offline mode — so point it at a server:

pytest --dburi "oracle+seerdb://user:password@host:1521/?service_name=XE"

Run it from the repository root. test.cfg has to be found in the working directory: SQLAlchemy's plugin reads it with configparser and does not look at pyproject.toml.

One setup step, and it needs a DBA

The suite expects a second namespace called test_schema, which on this backend is a username, and the test account must be able to create and drop tables inside it. Skipping this does not fail a handful of tests — every test in ComponentReflectionTest errors in setup, because they share a fixture that builds tables there.

The test account cannot create it (ORA-01031), so run this as a DBA once:

python test/prepare_test_schema.py --host localhost --service XE \
    --dba-password <SYSTEM password> --test-user <your test user>

It is safe to rerun: each statement is attempted on its own and one that has already been applied is reported and skipped. What it runs, for a DBA who would rather type it:

-- the test account's own tables must live in USERS: the Oracle dialect hides
-- SYSTEM-tablespace tables from reflection, and the suite then never empties
-- them between tests (rows "survive", ORA-00001)
ALTER USER <your test user> DEFAULT TABLESPACE USERS;
ALTER USER <your test user> QUOTA UNLIMITED ON USERS;

CREATE USER test_schema IDENTIFIED BY test_schema;
GRANT CREATE SESSION TO test_schema;
ALTER USER test_schema DEFAULT TABLESPACE USERS;
GRANT UNLIMITED TABLESPACE TO test_schema;

-- so the test account can build and drop the fixtures inside that schema;
-- SELECT ANY SEQUENCE keeps sequences in test_schema visible to reflection
GRANT CREATE ANY TABLE, DROP ANY TABLE, SELECT ANY TABLE, INSERT ANY TABLE,
      UPDATE ANY TABLE, DELETE ANY TABLE, CREATE ANY INDEX, DROP ANY INDEX,
      CREATE ANY VIEW, DROP ANY VIEW, CREATE ANY SEQUENCE, DROP ANY SEQUENCE,
      SELECT ANY SEQUENCE, COMMENT ANY TABLE, ANALYZE ANY TO <your test user>;

Those ANY privileges are broad. They are fine on a throwaway test instance — CI creates the namespace in a container it discards — but narrow them before granting on anything long-lived.

Connect string

Everything after ? is passed through to seerdb.connect, with integers and booleans coerced:

oracle+seerdb://user:password@host:1521/?service_name=XE
oracle+seerdb://user:password@host:1521/?sid=XE&timeout=5000

Licence

MIT. This repository is REUSE compliant.

Metadata

Release files for sqlalchemy-seerdb 0.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sqlalchemy-seerdb 0.3.0
File Size Uploaded
sqlalchemy_seerdb-0.3.0.tar.gz 17.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sqlalchemy-seerdb 0.3.0
File Interpreter ABI Platform
sqlalchemy_seerdb-0.3.0-py3-none-any.whl Python 3 none any Details

Total release size: 34.4 kB

Release files / sqlalchemy_seerdb-0.3.0.tar.gz

Download URL sqlalchemy_seerdb-0.3.0.tar.gz
Size 17.7 kB
Tags Source
SHA-256 checksum
How to use checksums
14465eab9feb69e9e281f1e73416ee26239ffde0391e2507da7735782f0fea3e
BLAKE2b-256 checksum
How to use checksums
ff4e8d3270f5e08767ec2c98e3860c19aee86d0d72a088115031d66019028bd2
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release files / sqlalchemy_seerdb-0.3.0-py3-none-any.whl

Download URL sqlalchemy_seerdb-0.3.0-py3-none-any.whl
Size 16.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
3cb3ca2bde0247554515a8398e3e911f5fa4c06c50ed4f144b2dd198c89a7e0f
BLAKE2b-256 checksum
How to use checksums
87a080cfbe7823cc83f110addf25a908c707c2fc63e71ad666234efbbcb056aa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 13, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

0.3.0 This release

2 release files

0.2.2

2 release files

0.2.1

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page