primero que todo debemo crear nuestra base de datos, en este caso estare usando una base de datos local mysql llamada ejemplo que contiene 2 tablas:

luego debemos crear nuestra applicacion
/ejemplo
├── /app
│ ├── init.py
│ ├── models.py
│ ├── mysql_service.py
│ ├── /static
│ ├── /templates
│ └── config.py
├── main.py
└── start.sh
puedes dercargar este ejemplo y ver el paso a paso en github.
despues debemos instalar las dependecias, para este proyecto solo usaremos:
- flask
- mysqlclient
- flask-SQLAlchemy
- flask-marshmallow
-marshmallow-SQLAlchemy
una vez instaladas las dependencias de la aplicacion, debemos configurarla en el archivo config.py; debemos configurar nuestra SECRET_KEY y nuestra SQLALCHEMY_DATABASE_URI, esta ultima dependerá de la base de datos que vayamos a usar:
postgres://username:password@host:port/database
mysql://username:password@host:port/database
oracle://username:password@host:port/database
username: usuario de la base de datos
password: del usuario de la base de datos
host: 127.0.0.1 (localhost)
port: optional
database: nombre de la base de datos
Nuestro archivo config.py qudaria así:
class Config:
SECRET_KEY = 'SUPER_SECRETO'
SQLALCHEMY_DATABASE_URI = 'mysql://sebastian:supertiancho99@127.0.0.1/ejemplo'
y nuestro init.py quedaria asi:
from flask import Flask
from .config import Config
def create_app():
app = Flask(__name__)
app.config.from_object(Config)
return app
ahora debemos establecer los modelos de nuestra base de datos vamos a nuestro archivo models.py:
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class Personas(db.Model):
__tablename__ = 'personas'
def __init__(self, id, nombre, apellido, locacion):
self.id = id
self.nombre = nombre
self.apellido = apellido
self.id_locacion = locacion
id = db.Column(db.Integer, primary_key=True)
nombre = db.Column(db.String(100), nullable=False)
apellido = db.Column(db.String(100), nullable=True)
id_locacion = db.Column(db.Integer, db.ForeignKey('locaciones.id'))
class Locaciones(db.Model):
__tablename__ = 'locaciones'
def __init__(self, id, ciudad, estado):
self.id = id
self.ciudad = ciudad
self.estado = estado
id = db.Column(db.Integer, primary_key=True)
ciudad = db.Column(db.String(100), nullable=False)
estado = db.Column(db.String(100), nullable=False)
persona = db.relationship('Personas', backref='persona', lazy=True)
Es necesario que cada modelo tenga su propio constructor y ademas el id de cada tabla tenga el nombre “id”, ya que asi es como SQLAlchemy identifica la primary key. Es importante tambien definir las llaves foraneas y las relaciones, las relaciones nos permitiran hacer referencia desde locaciones hacia personas usando el backref.
Pero SQLAlchemy() recibe como parametro la aplicacion entonces debemos ir a nuestro init.py y pasrle la app, agragamos al codigo que ya tenemos:
from .models import db
#dentro del metodo create app:
db.init_app(app)
una vez hecho esto ya estaremos listos para acceder a la información de nuestra base de datos. Vamos a mysql_service y aqui vamos a definir y declarar nuestras funciones : una para insertar otra para borrar y otra para consultar (query):
from .models import db, Personas, Locaciones
def intert_persona(id, nombre, apellido, locacion):
persona = Personas(id, nombre, apellido, locacion)
db.session.add(persona)
db.session.commit()
def delete_persona(id):
persona = Personas.query.filter_by(id=id).first()
db.session.delete(persona)
db.session.commit()
def get_personas():
persona = Personas.query.all()
return persona
def get_persona(id):
persona = Personas.query.filter_by(id=id).first()
return persona
es importante importar los modelos y el objeto db.
obviamente para poder insertar el registro debemos tener una locacion ya insertada a la que vamos a hacer referencia con la llave foranea de la persona, o simplemente la declaramos null usando None. importamos mysql_service.py donde queramos hacer las consultas y ya podremos llamar sus metodos:
from app.mysql_service import get_personas, get_persona, intert_persona, delete_persona
intert_persona(1,'sebastian','hernandez', None)
delete_persona(1)
persona = get_persona(2)
personas = get_personas()
Recuerden que el repositorio está en github github hechenle un ojo a la documentacion doc
Curso de Flask