Skip to content

Commit 34b6789

Browse files
committed
Updated the sqlacodegen section
1 parent b4710d4 commit 34b6789

File tree

7 files changed

+189
-121
lines changed

7 files changed

+189
-121
lines changed

recursos/leccion2/sqlacodegen/sistema/.env.example

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1+
### Common settings #############################
2+
ENGINE_DB=sqlite
13
### SQLite #############################
24
DB=sistema.db
3-
ENGINE_DB=sqlite
45
### MySQL/PostgreSQL #############################
56
# USER=
67
# PASSW=
Lines changed: 87 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,67 +1,117 @@
11
"""Módulo principal del programa"""
22

3-
from db import session
3+
import logging
4+
5+
from sqlalchemy import exc
6+
from settings import DB_FILE, Base, engine, session
47
from models import Estados, Ciudades, Clientes, Productos, Pedidos
58

9+
logging.basicConfig(level=logging.INFO)
10+
611

712
def consulta_estados():
813
"""Consulta todos los estados"""
914

10-
print("\n📜 Lista de Estados:\n")
11-
# SELECT * FROM estados;
12-
todos_estados = session.query(Estados).all()
13-
for cada_estado in todos_estados:
14-
print(f"{cada_estado}")
15+
print("✅ Lista de 10 Estados")
16+
# SELECT TOP 10 * FROM estados;
17+
todos_estados = session.query(Estados).limit(10).all()
18+
if len(todos_estados) == 0:
19+
logging.error("❌ ¡No hay ningún 'estado' con ese criterio en la base de datos!")
20+
else:
21+
row_count = 0
22+
for cada_estado in todos_estados:
23+
print(f"📜 {cada_estado}")
24+
row_count += 1
25+
logging.info(f"✅ ¡Consulta de los '{row_count}' estados!")
1526

1627

1728
def consulta_ciudades():
1829
"""Consulta todas las ciudades"""
1930

20-
print("\n📜 Lista de Ciudades:\n")
21-
# SELECT * FROM ciudades;
22-
todos_ciudades = session.query(Ciudades).all()
23-
for cada_ciudad in todos_ciudades:
24-
print(f"{cada_ciudad}")
31+
print("\n✅ Lista de 10 Ciudades")
32+
# SELECT TOP 10 * FROM ciudades;
33+
todos_ciudades = session.query(Ciudades).limit(10).all()
34+
if len(todos_ciudades) == 0:
35+
logging.error("❌ ¡No hay ningún 'ciudad' en la base de datos!")
36+
else:
37+
row_count = 0
38+
for cada_ciudad in todos_ciudades:
39+
print(f"📜 {cada_ciudad}")
40+
row_count += 1
41+
logging.info(f"✅ ¡Consulta de las '{row_count}' ciudades!")
2542

2643

2744
def consulta_clientes():
2845
"""Consulta todas las clientes"""
2946

30-
print("\n📜 Lista de Clientes:\n")
47+
print("\n Lista de Clientes")
3148
# SELECT * FROM clientes;
3249
todos_clientes = session.query(Clientes).all()
33-
for cada_cliente in todos_clientes:
34-
print(f"{cada_cliente}")
35-
36-
37-
def consulta_pedidos():
38-
"""Consulta todas las pedidos"""
39-
40-
print("\n📜 Lista de Pedidos:\n")
41-
# SELECT * FROM pedidos;
42-
todos_pedidos = session.query(Pedidos).all()
43-
for cada_pedido in todos_pedidos:
44-
print(f"{cada_pedido}")
50+
if len(todos_clientes) == 0:
51+
logging.error("❌ ¡No hay ningún 'cliente' en la base de datos!")
52+
else:
53+
row_count = 0
54+
for cada_cliente in todos_clientes:
55+
print(f"📜 {cada_cliente}")
56+
row_count += 1
57+
logging.info(f"✅ ¡Consulta de los '{row_count}' clientes!")
4558

4659

4760
def consulta_productos():
4861
"""Consulta todas las productos"""
4962

50-
print("\n📜 Lista de Productos:\n")
63+
print("\n Lista de Productos")
5164
# SELECT * FROM productos;
5265
todos_productos = session.query(Productos).all()
53-
for cada_producto in todos_productos:
54-
print(f"{cada_producto}")
66+
if len(todos_productos) == 0:
67+
logging.error("❌ ¡No hay ningún 'producto' en la base de datos!")
68+
else:
69+
row_count = 0
70+
for cada_producto in todos_productos:
71+
print(f"📜 {cada_producto}")
72+
row_count += 1
73+
logging.info("✅ ¡Consulta de los '{row_count}' productos!")
74+
75+
76+
def consulta_pedidos():
77+
"""Consulta todas las pedidos"""
78+
79+
print("\n✅ Lista de Pedidos")
80+
# SELECT * FROM pedidos;
81+
todos_pedidos = session.query(Pedidos).all()
82+
if len(todos_pedidos) == 0:
83+
logging.error("❌ ¡No hay ningún 'pedido' en la base de datos!\n")
84+
else:
85+
row_count = 0
86+
for cada_pedido in todos_pedidos:
87+
print(f"📜 {cada_pedido}")
88+
row_count += 1
89+
logging.info("✅ ¡Consulta de los '{row_count}' pedidos!")
5590

5691

5792
if __name__ == "__main__":
58-
# Consulta de productos
59-
consulta_estados()
60-
# Consulta de ciudades
61-
consulta_ciudades()
62-
# Consulta de clientes
63-
consulta_clientes()
64-
# Consulta de pedidos
65-
consulta_pedidos()
66-
# Consulta de pedidos
67-
consulta_productos()
93+
try:
94+
# Crea la base de datos y tablas
95+
Base.metadata.create_all(engine)
96+
# Consulta de productos
97+
consulta_estados()
98+
# Consulta de ciudades
99+
consulta_ciudades()
100+
# Consulta de clientes
101+
consulta_clientes()
102+
# Consulta de productos
103+
consulta_productos()
104+
# Consulta de pedidos
105+
consulta_pedidos()
106+
except exc.SQLAlchemyError as e:
107+
logging.error(
108+
f"❌ ERROR: ¡Se produjo un falla al establecer la conexión a la base de datos '{DB_FILE}': '{e}'!"
109+
)
110+
finally:
111+
if session:
112+
# Cerrar la conexión a la base de datos
113+
session.close()
114+
engine.dispose()
115+
logging.info(
116+
f"✅ ¡La conexión SQLite a la base de datos '{DB_FILE}' fue cerrada!"
117+
)

recursos/leccion2/sqlacodegen/sistema/models.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
"""Módulo de modelos de SQLAlchemy"""
22

3-
from db import Base
3+
from settings import Base
44

55
from sqlalchemy import Column, Date, Enum, ForeignKey, Integer, String
66
from sqlalchemy.orm import relationship
@@ -114,7 +114,7 @@ def __repr__(self):
114114
return f"<Clientes({self.nombre} {self.apellido}, {self.telefono}, {self.ciudades}, {self.pedidos})>"
115115

116116
def __str__(self):
117-
return f"Cliente: {self.nombre} ${self.apellido}"
117+
return f"Cliente: {self.nombre} {self.apellido}"
118118

119119

120120
class Pedidos(Base):
Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
# Install the sqlacodegen v3.0.0rc1 from github repo.
2-
-e git+https://github.com/agronholm/sqlacodegen.git@3.0.0rc1#egg=sqlacodegen
2+
# -e git+https://github.com/agronholm/sqlacodegen.git@3.0.0rc1#egg=sqlacodegen
33

44
# Install the packages from PyPi repository.
5-
SQLAlchemy>=1.4.36
6-
python-dotenv==0.21.0
5+
SQLAlchemy>=2.0.23
6+
sqlacodegen==3.0.0
7+
python-dotenv==1.0.1

recursos/leccion2/sqlacodegen/sistema/settings.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616
PORT = os.getenv("PORT")
1717
DB = os.getenv("DB", "sistema.db")
1818
DB_PATH = os.path.dirname(os.path.abspath(__file__)) + os.sep
19-
DB_FILE = os.getenv("DB")
19+
DB_FILE = DB
2020

2121
engine = None
2222

recursos/leccion2/sqlacodegen/sistema/sistema_data.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@ INSERT INTO clientes (id, nombre, apellido, codigo_postal, telefono)
55
VALUES (2, 'Ana', 'Poleo', '6302', '+58-426-5831297');
66
INSERT INTO clientes (id, nombre, apellido, codigo_postal, telefono)
77
VALUES (3, 'Manuel', 'Matos', '4001', '+58-414-2360943');
8+
INSERT INTO clientes (id, nombre, apellido, codigo_postal, telefono)
9+
VALUES (4, 'Liliana', 'Andradez', '3105', '+58-414-6782473');
810

911
-- Seleccionar registros
1012
SELECT * FROM clientes;

0 commit comments

Comments
 (0)