Configuración de Google Cloud SQL con Flask

Configurar una base de datos puede ser muy complicado, sin embargo, existen algunas soluciones bastante simples y escalables, y una de ellas es Google Cloud SQL. Cloud SQL es un servicio de base de datos totalmente administrado que facilita la configuración, el mantenimiento y la administración de sus bases de datos relacionales de PostgreSQL y MySQL en la nube. Configurarlo puede ser complicado y simple, ¿confundido? Estoy aquí para aclarar la confusión.

En primer lugar, necesita una cuenta de Google Cloud Platform (GCP). Si no quieres una, entonces crea una cuenta yendo a este enlace aquí. También obtendrá $300 créditos gratis por un año cuando se registre. También debe configurar su cuenta de facturación para poder usar algunos de los servicios de GCP que incluyen Cloud SQL. No se preocupe, no se le cobrará por este tutorial si tiene créditos gratuitos.

Ahora, debe habilitar la API de administración de Cloud SQL desde el mercado. Puede hacerlo haciendo clic en este enlace aquí .
Ahora, saltemos a nuestro panel de control de GCP y luego busquemos Cloud SQL . Su página de CLoud SQL debería verse así.

GCP Dashboard

Ahora, haga clic en CREAR INSTANCIA y luego, para este tutorial, estaríamos seleccionando la opción MySQL . Ahora, debería ser recibido con la siguiente página.

Instance page

Ahora, completa los detalles. Siempre se recomienda generar la contraseña porque crea una string aleatoria y anotar la contraseña porque no puede recuperarla si la olvida y también cambie la región a la más cercana geográficamente y luego haga clic en crear . Eso es todo. Ahora, la página siguiente debería ser algo como esto.

instance

Ahora, primero necesita crear una base de datos. Para hacer eso simplemente, haga clic en la opción Bases de datos en la barra de navegación a la izquierda y luego haga clic en Crear base de datos y luego proporcione el nombre de su base de datos. Para este tutorial, el nombre de nuestra base de datos será testing . Después de haber hecho eso, debería ver su base de datos listada allí. Todo eso por la parte de configuración. Ahora veamos cómo se puede conectar a esta base de datos desde la aplicación del matraz.

Obviamente, necesitará Python. En este tutorial, actualmente estamos en la última versión de python que es 3.8
. También necesita instalar el frasco, el frasco-sqlalchemy y mysqlclient. Para instalarlos, simplemente ejecute el siguiente comando en su terminal.

pip3 install Flask Flask-SQLAlchemy mysqlclient

Nota: Si está en una máquina Linux, entonces necesita tener instalado libmysqlclient-dev antes de instalar mysqlclient. Para instalarlo, simplemente ejecute sudo apt-get install libmysqlclient-dev en su terminal.

Con todos los requisitos previos hechos, pasemos directamente al código. Para simplificar, escribiré todo el código en un solo archivo, pero como sabe, si planea crear una aplicación de tamaño mediano, necesita tener archivos separados para rutas, modelos, etc.
Aquí, el el código completo se escribirá dentro de un solo archivo llamado app.py. He agregado explicaciones para cada línea de mi código en forma de comentarios en línea.

Python3

# imports
from flask import Flask, request, make_response
from flask_sqlalchemy import SQLAlchemy
 
# initializing Flask app
app = Flask(__name__)
 
# Google Cloud SQL (change this accordingly)
PASSWORD ="your database password"
PUBLIC_IP_ADDRESS ="public ip of database"
DBNAME ="database name"
PROJECT_ID ="gcp project id"
INSTANCE_NAME ="instance name"
 
# configuration
app.config["SECRET_KEY"] = "yoursecretkey"
app.config["SQLALCHEMY_DATABASE_URI"]= f"mysql + mysqldb://root:{PASSWORD}@{PUBLIC_IP_ADDRESS}/{DBNAME}?unix_socket =/cloudsql/{PROJECT_ID}:{INSTANCE_NAME}"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"]= True
 
db = SQLAlchemy(app)
 
# User ORM for SQLAlchemy
class Users(db.Model):
    id = db.Column(db.Integer, primary_key = True, nullable = False)
    name = db.Column(db.String(50), nullable = False)
    email = db.Column(db.String(50), nullable = False, unique = True)
 
@app.route('/add', methods =['POST'])
def add():
    # getting name and email
    name = request.form.get('name')
    email = request.form.get('email')
 
    # checking if user already exists
    user = Users.query.filter_by(email = email).first()
 
    if not user:
        try:
            # creating Users object
            user = Users(
                name = name,
                email = email
            )
            # adding the fields to users table
            db.session.add(user)
            db.session.commit()
            # response
            responseObject = {
                'status' : 'success',
                'message': 'Successfully registered.'
            }
 
            return make_response(responseObject, 200)
        except:
            responseObject = {
                'status' : 'fail',
                'message': 'Some error occured !!'
            }
 
            return make_response(responseObject, 400)
         
    else:
        # if user already exists then send status as fail
        responseObject = {
            'status' : 'fail',
            'message': 'User already exists !!'
        }
 
        return make_response(responseObject, 403)
 
@app.route('/view')
def view():
    # fetches all the users
    users = Users.query.all()
    # response list consisting user details
    response = list()
 
    for user in users:
        response.append({
            "name" : user.name,
            "email": user.email
        })
 
    return make_response({
        'status' : 'success',
        'message': response
    }, 200)
 
 
if __name__ == "__main__":
    # serving the app directly
    app.run()

Debe cambiar los siguientes marcadores de posición en el código 

  • CONTRASEÑA: la contraseña que estableció para su base de datos al crear la instancia
  • PUBLIC_IP_ADDRESS: la IP pública de sus instancias de GCP (se puede encontrar en la página de descripción general)
  • DBNAME: nombre de la base de datos que creó más adelante (para este tutorial fue ‘testing’)
  • PROJECT_ID: su ID de proyecto de GCP
  • INSTANCE_NAME: su nombre de instancia de Cloud SQL

Su código está listo pero aún no puede acceder a su base de datos. Aquí es donde la mayoría de la gente se equivoca. Siguen revisando la documentación y su base de código, pero no encuentran ningún error y se frustran por completo y se dan por vencidos, pero espero que no seas tú quien se dé por vencido, ¿verdad? Entonces, veamos qué queda por hacer.

La razón por la que su código no puede acceder a su base de datos es que GCP bloquea de forma predeterminada todas las conexiones entrantes de fuentes desconocidas (por motivos de seguridad). Entonces, lo que debe hacer ahora es agregar la dirección IP pública de su sistema a la red autorizada . Para hacer eso, primero, vaya a la página de su instancia de Cloud SQL y haga clic en el botón editar . Deberías ver una página como esta

Authorization

Aquí, haga clic en el botón Agregar red debajo de la IP pública. Allí, debe ingresar su dirección IP pública. Si no conoce su IP pública, vaya a este enlace . Después de haber ingresado su IP pública, está listo para comenzar.
Ahora, su aplicación debería poder conectarse a su base de datos desde su sistema. Ahora, abra su terminal dentro del directorio de su proyecto y escriba python dentro. Esto debería abrir el intérprete de python. Ahora, simplemente escriba las siguientes líneas para crear su tabla desde el ORM.

Python3

from app import db
db.create_all()

Eso es todo. Ahora está listo para probar su aplicación. Continúe y use cualquier herramienta de solicitud de API para verificar si funciona o no. Puedes usar el famoso cartero para probarlo.
La capacidad de alojar su base de datos en un servicio externo es muy importante para los estudiantes desarrolladores, de lo contrario, es imposible mostrar sus proyectos.
 

Publicación traducida automáticamente

Artículo escrito por debdutgoswami y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *