Greetings,
I'm writing to ask some hints for my problem.
I am using SQLAlchemy Core (no ORM, because everything it is wrapped by
sqlachemy_aio - everything happens inside a asyncio loop).
The program I'm working on can be deployed with a PostgreSQL or an Oracle
DB, customer choice, I have no power on this.
My problem is writing Table(s) definitions whose name and schema change
depending on the DB that will be used.
If the table name is "table" and the schema name is "schema" (I mean the
schema= parameter of sqlalchemy.schema.Table):
* with PostgreSQL, the table name should be "table" and the schema "schema".
* with Oracle, the table name should be "schema_table" and there should be
no schema (the default one for the user logging onto Oracle).
With PostgreSQL, the program uses multiple table grouped in different
schemas, so different Table instances will be grouped in different schema,
and there will be inter-schema Foreign Keys.
Also the solution should be compatible with Alembic, as it is used for
versioning.
When the program is deployed, a file contains the information whether the
DB in use is PostgreSQL or Oracle.
One idea (but I think it won't work with Alembic), is to create a new class
that inherits from sqlalchemy.schema.Table and overrides the __new__ method:
# python3code
class CustomTable(Table):
def __new__(cls, *args, **kw):
database_type = read_database_type()
if database_type == "oracle":
try:
schema = kw.pop("schema")
except KeyError:
pass
else:
tablename = f"{schema}_{args[0]}"
return super().__new__(cls, tablename, *args[1:], **kw)
return super().__new__(cls, *args, **kw)
It would be nice to create a similar class for Alembic, to customize the
op.create_table and op.drop_table statement.
Before writing further code, I'd like to ask whether there are built in
mechanisms in sqlalchemy to address this problem.
--
SQLAlchemy -
The Python SQL Toolkit and Object Relational Mapper
http://www.sqlalchemy.org/
To post example code, please provide an MCVE: Minimal, Complete, and Verifiable
Example. See http://stackoverflow.com/help/mcve for a full description.
---
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
To post to this group, send email to [email protected].
Visit this group at https://groups.google.com/group/sqlalchemy.
For more options, visit https://groups.google.com/d/optout.