Mysql
 sql >> Database >  >> RDS >> Mysql

Flask SQLAlchemy non chiude le connessioni al database MySQL

Ho finalmente trovato una soluzione al problema di cui sopra.

Ho utilizzato il modello dichiarativo definito in qui invece di seguire la documentazione di avvio rapido per Flask-SQLAlchemy fornita qui .

I file modificati sono i seguenti:

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)

Per cercare i record potremmo usare User.query.filter_by().all() o db_engine.execute() .

Per scrivere nuovi dati nel database, possiamo utilizzare quanto segue:

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