sql >> Base de Datos >  >> RDS >> Mysql

Flask SQLAlchemy no cierra las conexiones de la base de datos MySQL

Finalmente encontré una solución al problema anterior.

Usé el modelo declarativo definido en aquí en lugar de seguir la documentación de inicio rápido para Flask-SQLAlchemy proporcionada aquí .

Los archivos modificados son los siguientes:

db.py :

from sqlalchemy import create_engine
from sqlalchemy.orm import scoped_session, sessionmaker
from sqlalchemy.ext.declarative import declarative_base

engine = create_engine(DB_URI, convert_unicode=True)
db_session = scoped_session(sessionmaker(autocommit=False,
                                         autoflush=False,
                                         bind=engine))
Base = declarative_base()
Base.query = db_session.query_property()

def init_db():
    import user
    Base.metadata.create_all(bind=engine)

main.py :

from db import init_db, db_session

init_db()

@app.teardown_appcontext
def shutdown_session(exception=None):
    db_session.remove()

user.py :

from sqlalchemy import Column, Integer, String
from data_models.db import Base
class User(Base):
    id = db.Column(Integer, primary_key=True)
    username = db.Column(String(80), unique=True, nullable=False)
    email = db.Column(String(120), unique=True, nullable=False)

Para consultar registros, podríamos usar User.query.filter_by().all() o db_engine.execute() .

Para escribir nuevos datos en la base de datos, podemos usar lo siguiente:

new_user_entry = User(username = "abc", email = "[email protected]")
db_session.add(new_user_entry)
db_session.commit()