Por fin luego de mucho trabajar pudimos encontrar el arreglo de esta contrariedad que algunos los usuarios de nuestra web tienen. Si deseas aportar algo no dudes en aportar tu conocimiento.
Solución:
Tuve la misma pregunta y la respuesta, que encontré, es:
if not engine.dialect.has_schema(engine, schema_name):
engine.execute(sqlalchemy.schema.CreateSchema(schema_name))
También podemos verificar el esquema sin la instancia del motor, pero usando la conexión
conn = engine.connect()
if conn.dialect.has_schema(conn, schema_name):
Para los usuarios de MS Sql, no hay has_schema()
pero esto parece funcionar:
if schemaname not in conn.dialect.get_schema_names(conn):
conn.execute(schema.CreateSchema(schemaname))
Puedes usar el excelente sqlalchemy_utils
paquete para hacer precisamente eso, de una manera muy ordenada.
Primero, instale el paquete:
pip install sqlalchemy_utils
Entonces úsalo así:
from sqlalchemy_utils.functions import database_exists, create_database
engin_uri = 'postgres://[email protected]/name'
if not database_exists(engin_uri):
create_database(engin_uri)
El ejemplo de los documentos oficiales ha usado PostgreSQL y yo personalmente lo he usado en MySQL 8.
Si te animas, eres capaz de dejar una división acerca de qué te ha impresionado de este ensayo.