如何全局初始化 SQL Alchemy 引擎、会话和表

时间:2021-05-18 19:03:15

标签: python mysql sqlalchemy

我正在开发一个 Python 应用程序,其中的大部分功能将与 MySQL 数据库中的特定表进行交互(创建、读取、更新和删除)。我知道我可以使用以下代码查询这个特定的表:

engine = create_engine(
            f"mysql+pymysql://{username}:{password}@{host}:{port}",
            pool_pre_ping=True
        )
meta = MetaData(engine)
my_table = Table(
    'my_table',
     meta,
     autoload=True,
     schema=db_name
)
dbsession = sessionmaker(bind=engine)
session = dbsession()

# example query to table
results = session.query(my_table).filter(my_table.columns.id >=1)
results.all()

但是,我不明白如何使这些定义(引擎、元数据、表、会话)对我的所有函数具有全局性。我应该在 init.py 中定义这些东西,然后将它们作为函数参数传递吗?我应该定义一个大类并在类初始化期间初始化它们吗?

我的目标是能够随时在我的任何函数中查询该表,而不必担心连接是否已断开。根据{{​​3}}:

<块引用>

一次,在您的应用程序的全局范围内的某个地方。它应该被视为应用程序配置的一部分。如果您的应用程序在一个包中有三个 .py 文件,例如,您可以将 sessionmaker 行放在您的 init.py 文件中;从那时起,您的其他模块会说“from mypackage import Session”。这样,其他人只使用 Session(),而该会话的配置由该中心点控制。

好的,但是 enginetablemeta 怎么样?我需要担心这些吗?

0 个答案:

没有答案