首页 > 解决方案 > SQLAlchemy:分叉代码中的 automap_base

问题描述

我开发了一个与 MySQL DB 交互的 API 服务器,它反映了它的模式,并且还被用于多个进程。我的数据库工作代码如下所示:

from sqlalchemy import MetaData
from sqlalchemy.ext.automap import automap_base
from sqlalchemy.orm.session import Session

my_engine = create_engine_by_info(my_config)
metadata = MetaData(bind=my_engine)
Base: type = automap_base(metadata=metadata)

class User(Base):
    __tablename__ = 'auth_user'
    # Relation descriptions...

# Other classes...

Base.prepare(my_engine, reflect=True)

def find_user(field):
    with Session(my_engine) as session:
        query = session.query(User)
        query = query.filter(User.field == field)
        records = query.all()
        for u in records:
            return u
        return None

它工作正常,直到进程被分叉:在子进程工作后,原始进程失去连接:Lost connection to MySQL server during query

我想我应该my_engine为每个进程分开(例如,一些带有引擎字典的函数,其中键是 PID),但是如果我的类定义一开始就需要引擎,我该怎么做呢?也许我也可以在函数中移动类,但这将是一个地狱......那么,这里有什么好的解决方案?

标签: pythonmysqlsqlalchemyfork

解决方案


推荐阅读