Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Flask-SQLAlchemy - kết nối nhanh chóng với nhiều cơ sở dữ liệu

Một cơ sở dữ liệu

Động cơ là thứ cho phép bạn sử dụng kết nối tổng hợp. Theo mặc định, nó sẽ duy trì các kết nối qua các yêu cầu. Cách sử dụng cơ bản (không có những thứ cầu kỳ như scoped_session hoặc sessionmaker ) là như thế này:

engine = create_engine(...)

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

Ngoài ra, bạn có thể thêm scoped_sessionsessionmaker :

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 làm cho cuộc sống của bạn dễ dàng hơn bằng cách cung cấp tất cả những điều này:

db = SQLAlchemy(app)

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

Nhiều cơ sở dữ liệu

Bạn có thể dễ dàng mở rộng khái niệm này cho nhiều cơ sở dữ liệu:

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 ""

Khi bạn thêm scoped_sessionsessionmaker :

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 ""

Điều này hơi khó chịu khi bạn có nhiều cơ sở dữ liệu, trong trường hợp đó, bạn có thể nên viết một lớp đăng ký để theo dõi tất cả các công cụ và phiên:

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 ""

Bạn sẽ cần thêm một số loại LRU bên trên nó để không có việc tạo ra các động cơ không bị ràng buộc.

flask-sqlalchemy có hỗ trợ cho một dạng giới hạn của nhiều cơ sở dữ liệu trong đó mỗi mô hình của bạn kết nối với một cơ sở dữ liệu khác nhau. Nếu điều này áp dụng cho bạn, tài liệu có tại tại đây .




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Định cấu hình sao chép cơ sở dữ liệu MySQL Master-Master

  2. Nhân bản / Sao chép bản ghi trong cùng một bảng MySQL

  3. Ngày giờ mới nhất từ ​​chỉ mục mysql duy nhất

  4. Làm cách nào để chèn các cột tại một vị trí cụ thể trong bảng hiện có?

  5. DateTimeField nhận được một ngày giờ ngây thơ