2.8. Autogenerar modelos SQLAlchemy¶
Nota
Propósito: Generador automático de código fuente de modelos SQLAlchemy
sqlacodegen es una herramienta que lee la estructura de una base de datos existente y genera el código de modelos SQLAlchemy apropiado, usando el estilo declarativo si es posible.
Esta herramienta se escribió como reemplazo de sqlautocode, que sufría varios problemas (incluida, entre otras, la incompatibilidad con Python 3 y la última versión de SQLAlchemy).
2.8.1. Características¶
Soporta
SQLAlchemy
0.8.x - 1.4.x.Produce código declarativo que casi parece escrito a mano.
Produce código compatible con PEP 8.
Determina con precisión las relaciones, incluidos muchos a muchos, uno a uno.
Detecta automáticamente la herencia de tablas unidas.
Excelente cobertura de prueba.
2.8.2. Instalación¶
Para instalar la librería sqlacodegen
debe seguir el siguientes paso, el cual
a continuación se presentan el correspondiente comando de tu sistema operativo:
$ pip install git+https://github.com/agronholm/sqlacodegen.git@3.0.0rc1#egg=sqlacodegen
> pip install git+https://github.com/agronholm/sqlacodegen.git@3.0.0rc1#egg=sqlacodegen
Puede probar si la instalación se realizo correctamente, ejecutando el siguiente comando correspondiente a tu sistema operativo:
$ python -c "import sqlacodegen ; print(sqlacodegen.__name__)"
> python -c "import sqlacodegen ; print(sqlacodegen.__name__)"
Si muestra el nombre del paquete como sqlacodegen
, tiene correctamente instalada
la librería. Con esto, ya tiene todo listo para continuar.
2.8.3. Conexión al Engine¶
Luego configura el engine (cadena de conexión) para la DB respectiva. Para esto se explican algunas configuraciones, para SQLite, MySQL y PostgreSQL a continuación:
Truco
Cada cadena de conexión necesita que se instale la librería dependiente.
2.8.3.1. SQLite¶
Para configurar el engine
con SQLite
debe definir la cadena de conexión
que esta compuesto por varios parámetros.
Los parámetros deben ser reemplazadas con sus propios datos en la linea de comando:
sqlacodegen --generator declarative sqlite:///{DB_PATH}/{DB_FILE} --outfile file.py
A continuación se presentan el correspondiente comando de tu sistema operativo:
$ sqlacodegen --generator declarative sqlite:///db.sqlite3 --outfile models.py
> .\sqlacodegen.exe --generator declarative sqlite:///db.sqlite3 --outfile models.py
2.8.3.2. MySQL¶
Para configurar el engine
con MySQL
debe definir la cadena de conexión
que esta compuesto por varios parámetros, los cuales deben ser reemplazadas con sus propios datos
en la linea de comando con el comando sqlacodegen
.
Truco
Para conectarte al servidor MySQL
necesite el paquete PyMySQL.
Luego ya teniendo instalado el paquete PyMySQL
debe ejecutar el siguiente comando
de sqlacodegen
, los parámetros deben ser reemplazadas con sus propios datos en la
linea de comando:
sqlacodegen --generator declarative mysql+pymysql://USER:PASSW@HOST:PORT/DB --outfile file.py
A continuación se presentan el correspondiente comando de tu sistema operativo:
$ sqlacodegen --generator declarative mysql+pymysql://root:root@localhost:3306/sistema \
--outfile models.py
> .\sqlacodegen.exe --generator declarative mysql+pymysql://root:root@localhost:3306/sistema --outfile models.py
2.8.3.3. PostgreSQL¶
Para configurar el engine
con PostgreSQL
debe definir la cadena de conexión
que esta compuesto por varios parámetros, los cuales deben ser reemplazadas con sus propios datos
en la linea de comando con el comando sqlacodegen
.
Truco
Para conectarte al servidor PostgreSQL
necesite el paquete psycopg2.
Luego ya teniendo instalado el paquete psycopg2
debe ejecutar el siguiente comando
de sqlacodegen
, los parámetros deben ser reemplazadas con sus propios datos en la
linea de comando:
sqlacodegen --generator declarative postgresql://USER:PASSW@HOST:PORT/DB --outfile file.py
A continuación se presentan el correspondiente comando de tu sistema operativo:
$ sqlacodegen --generator declarative postgresql://root:root@localhost:3306/sistema \
--outfile models.py
> .\sqlacodegen.exe --generator declarative postgresql://root:root@localhost:3306/sistema --outfile models.py
Si necesita más tipos de cadenas de conexión o engine, puede
consultar el apartado Engine Configuration de la documentación oficial de SQLAlchemy
.
2.8.4. Generación de modelos¶
Luego de haber definido la cadena de conexión a la base
de datos, puede realizar la generación de modelos SQLAlchemy
, ejecutando el siguiente
comando, el cual a continuación se presentan el correspondiente comando de tu sistema
operativo:
$ sqlacodegen --generator declarative sqlite:///sistema.db --outfile models.py
> .\sqlacodegen.exe --generator declarative sqlite:///sistema.db --outfile models.py
El anterior comando al ejecutar debe generar un modulo python llamado models.py
que contiene el siguiente código:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 |
|
Este es el código fuente de modelos SQLAlchemy
generado en base a la base
de datos sistema.db
. Mas adelante se mejorara esta código fuente para obtener
una mejor representación de los objetos.
2.8.5. Práctica - Caso real¶
A continuación se presenta una práctica más real de implementar el uso de sqlacodegen
en proyectos con SQLAlchemy
, a continuación la estructura de proyecto llamado sistema
:
sistema/
├── .env.example
├── db.py
├── __init__.py
├── main.py
├── models.py
├── requirements.txt
└── sistema.db
A continuación se presenta y explica el uso de cada archivo para este proyecto:
Archivo .env.example
Archivo plantilla dotenv del paquete adicional python-dotenv.
1 2 3 4 5 6 7 8 9 |
|
Archivo db.py
Modulo de configuraciones del programa.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 |
|
Archivo models.py
Modulo de modelos de SQLAlchemy.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
|
Archivo main.py
Modulo principal del programa.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
|
Archivo requirements.txt
Archivo de requirements.txt de la herramienta de gestión de paquetes pip.
1 2 3 4 5 6 |
|
Archivo sistema.db
Archivo de base de datos de SQLite llamado sistema.db
la cual se incluye ya que cada tiene la estructura de tablas y registros iniciales para hacer
esta practica.
Teniendo creada la anterior estructura de proyecto, vuelva a ejecutar ahora el modulo con el siguiente comando, el cual a continuación se presentan el correspondiente comando de tu sistema operativo:
Antes de ejecutar debes instalar sus dependencias, con el siguiente comando:
$ pip install -r requirements.txt
Ademas debe instalar y editar el archivo .env
, con el siguiente comando:
$ cp .env.example .env
$ nano .env
Truco
El archivo .env
se definen las configuraciones de conexión a la base de datos,
puede modificarlo cambiar valores de la conexión.
Nota
Para conexiones a base de datos MySQL y PostgreSQL debe definir las variables que por defecto no están definidas.
Truco
Para ejecutar el código fuente de esta practica debe invocar al modulo main.py
,
abra una consola de comando, acceda al directorio donde se encuentra la estructura previa
y ejecute el siguiente comando:
$ python main.py
Antes de ejecutar debes instalar sus dependencias, con el siguiente comando:
> pip install -r requirements.txt
Ademas debe instalar y editar el archivo .env
, con el siguiente comando:
> copy .env.example .env
> notepad.exe .env &
Truco
El archivo .env
se definen las configuraciones de conexión a la base de datos,
puede modificarlo cambiar valores de la conexión.
Nota
Para conexiones a base de datos MySQL y PostgreSQL debe definir las variables que por defecto no están definidas.
Truco
Para ejecutar el código fuente de esta practica debe invocar al modulo main.py
,
abra una consola de comando, acceda al directorio donde se encuentra la estructura previa
y ejecute el siguiente comando:
> python main.py
El anterior código al ejecutar debe mostrar el siguiente mensaje:
¡Consulta todos los estados!
¡Consulta todas las ciudades!
Asi de esta forma puede usar sqlacodegen
para generar modelos SQLAlchemy
desde
una base de datos existente e implementar las operaciones ingresar, consultar,
actualizar y eliminar registro en las tablas.
Ver también
Consulte la sección de lecturas suplementarias del entrenamiento para ampliar su conocimiento en esta temática.