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
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | b3d3afc35033487db3cade7099f4e0a78b19cff99814f2e03813c3e3c6f03b9b |
|
MD5 | ed7a5da7301b2352b41d9ea2254f3c96 |
|
BLAKE2b-256 | b9556196cb94f9c430329bc3f4d6e33194c068522ab890364493c01c3f67af58 |
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
Algorithm | Hash digest | |
---|---|---|
SHA256 | 90e6e7d9e8d816cb3d18590d361f91d6020f561ddd8bba2dbcd15660af14754b |
|
MD5 | 4f15d4d9c16359edd87d5406ae7988ec |
|
BLAKE2b-256 | dec213bd3bffae0a3745b015fed7ba6e0b084d11bd03e6dc1a54b99c359c9cd0 |