Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Flask-SQLAlchemy - koneksi langsung ke banyak database

Satu Basis Data

Mesin inilah yang memungkinkan Anda menggunakan penyatuan koneksi. Secara default, ini akan mempertahankan koneksi di seluruh permintaan. Penggunaan dasar (tanpa hal-hal mewah seperti scoped_session atau sessionmaker ) seperti ini:

engine = create_engine(...)

@app.route(...)
def foo():
    session = Session(bind=engine)
    try:
        session.query(...)
        session.commit()
    finally:
        session.close()
    return ""

Selain itu, Anda dapat menambahkan scoped_session dan sessionmaker :

engine = create_engine(...)
Session = sessionmaker(bind=engine)
session = scoped_session(Session, scopefunc=...)

@app.route(...)
def foo():
    try:
        session.query(...)
        session.commit()
    finally:
        session.close()
    return ""

flask-sqlalchemy membuat hidup Anda lebih mudah dengan menyediakan semua ini:

db = SQLAlchemy(app)

@app.route(...)
def foo():
    db.session.query(...)
    db.session.commit()
    return ""

Beberapa Basis Data

Anda dapat dengan mudah memperluas konsep ini ke beberapa database:

engine1 = create_engine(...)
engine2 = create_engine(...)

@app.route(...)
def foo():
    session = Session(bind=choose_engine_for_user())
    try:
        session.query(...)
        session.commit()
    finally:
        session.close()
    return ""

Saat Anda menambahkan scoped_session dan sessionmaker :

engine1 = create_engine(...)
engine2 = create_engine(...)
Session1 = sessionmaker(bind=engine1)
Session2 = sessionmaker(bind=engine2)
session1 = scoped_session(Session1, scopefunc=...)
session2 = scoped_session(Session2, scopefunc=...)

@app.route(...)
def foo():
    session = choose_session_for_user()
    try:
        session.query(...)
        session.commit()
    finally:
        session.close()
    return ""

Ini menjadi sedikit mengganggu ketika Anda memiliki banyak database, dalam hal ini Anda mungkin harus menulis kelas registri untuk melacak semua mesin dan sesi:

class SessionRegistry(object):
    _registry = {}

    def get(self, url, **kwargs):
        if url not in self._registry:
            engine = create_engine(url, **kwargs)
            Session = session_maker(bind=engine)
            session = scoped_session(Session, scopefunc=...)
            self._registry[url] = session
        return self._registry[url]

registry = SessionRegistry()

@app.route(...)
def foo():
    session = registry.get(...)
    try:
        session.query(...)
        session.commit()
    finally:
        session.close()
    return ""

Anda harus menambahkan semacam LRU di atasnya sehingga tidak ada pembuatan mesin tanpa batas.

flask-sqlalchemy memiliki dukungan untuk beberapa database dalam bentuk terbatas di mana setiap model Anda terhubung ke database yang berbeda. Jika ini berlaku untuk Anda, dokumentasinya di sini .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. DEADLOCK APPARENT Membuat utas darurat untuk tugas tertunda yang belum ditetapkan

  2. MySQL JOIN mengembalikan bidang NULL

  3. Tentukan nilai kunci utama secara manual di kolom JPA @GeneratedValue

  4. Replikasi Asynchronous Failover Otomatis di MySQL 8.0.22

  5. Adminer – Alat Administrasi Basis Data Berbasis Web Tingkat Lanjut untuk Linux