Skip to main content

Dynamic SQLAlchemy Metadata Reflection of One or More SQLALchemy Engines

Project description

sa-metameta

Meta information of SQLAlchemy metadata by engine

Purpose

This module is designed to have a top-level class instance to which SQLAlchemy Engine instances can be registered as a MetaEngine. Each MetaEngine can then be probed directly to retrieve all tables by user schema. Thus an application can reference multiple databases and use the reflected Table instances to create queries for each.

This module has classes that will probe a RDBMS that supports the information_schema.schema view to get table information for each schema in a database. Currently, only PostgreSQL is fully supported.

This module will support psycopg2 and asyncpg.

This module requires SQLAlchemy >= v1.4 for database probing and Table class creation.

This module currently supports only table object creation.

Overview

After instantiating the MetaMeta class, an engine can be registered. Once that is done, the database can be probed for tables. Once that has completed successfully, the tables can be referenced starting from the MetaMeta instance to the engine, to the schema, and then to the table.

Example:

import sqlalchemy as sa
from sa_metameta import meta

engine = sa.create_engine("postgresql://postgres:pg_passwd@localhost:5432/my_database")

mm = meta.MetaMeta()
# This will use the database name from the URL as the attribute name
mm.register_engine(engine)
# This will probe all schemata in my_database and for each schema, the tables will be reflected.
mm.my_database.discover()

# now we can see what tables have been found by using list()
list(mm.my_database.public)
[
    "table1",
    "table2",
    ...
]

The engine, schema, and table can be referenced by dot or subscript notation:

engine = mm["my_database"]
schema = mm["my_database"]["public"]
table1 = mm["my_database"]["public"]["table1"]

# or

engine = mm.my_database
schema = mm.my_database.public
table1 = mm.my_database.public.table1

To reference columns, use the Table().c.column syntax.

query = sa.select(table1.c.label).filter(table1.c.quatloos > 200)
db = engine.session()
res = db.execute(query).all()

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sa-metameta-0.0.2.tar.gz (11.7 kB view details)

Uploaded Source

Built Distribution

sa_metameta-0.0.2-py3-none-any.whl (13.0 kB view details)

Uploaded Python 3

File details

Details for the file sa-metameta-0.0.2.tar.gz.

File metadata

  • Download URL: sa-metameta-0.0.2.tar.gz
  • Upload date:
  • Size: 11.7 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.8

File hashes

Hashes for sa-metameta-0.0.2.tar.gz
Algorithm Hash digest
SHA256 b3d3afc35033487db3cade7099f4e0a78b19cff99814f2e03813c3e3c6f03b9b
MD5 ed7a5da7301b2352b41d9ea2254f3c96
BLAKE2b-256 b9556196cb94f9c430329bc3f4d6e33194c068522ab890364493c01c3f67af58

See more details on using hashes here.

File details

Details for the file sa_metameta-0.0.2-py3-none-any.whl.

File metadata

  • Download URL: sa_metameta-0.0.2-py3-none-any.whl
  • Upload date:
  • Size: 13.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/4.0.1 CPython/3.10.8

File hashes

Hashes for sa_metameta-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 90e6e7d9e8d816cb3d18590d361f91d6020f561ddd8bba2dbcd15660af14754b
MD5 4f15d4d9c16359edd87d5406ae7988ec
BLAKE2b-256 dec213bd3bffae0a3745b015fed7ba6e0b084d11bd03e6dc1a54b99c359c9cd0

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page