sql >> データベース >  >> RDS >> Mysql

FlaskSQLAlchemyはMySQLデータベース接続を閉じません

    私はついに上記の問題の修正を見つけました。

    こちら で定義されている宣言型モデルを使用しました こちら に記載されているFlask-SQLAlchemyのクイックスタートドキュメントに従う代わりに 。

    変更されたファイルは次のとおりです。

    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)
    

    レコードをクエリするには、User.query.filter_by().all()を使用できます。 またはdb_engine.execute()

    データベースに新しいデータを書き込むには、次を使用できます。

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


    1. MySQLとMariaDBの容量計画-ストレージサイズのディメンション化

    2. MySQL、null日付を挿入する方法

    3. 1日の各時間の最新のレコードを選択する方法

    4. DBMS_SCHEDULER.CREATE_JOBプロシージャを使用してプロシージャを実行する方法