Python 在sqlalchemy表模型类中使用全局声明性_基

Python 在sqlalchemy表模型类中使用全局声明性_基,python,sql,oop,sqlalchemy,relational-database,Python,Sql,Oop,Sqlalchemy,Relational Database,我正在学习,我正在阅读的所有教程/相关问题(例如,或)都使用了范例: import sqlalchemy as sqla DeclarativeBase = sqla.ext.declarative.declarative_base() class TableModel(DeclarativeBase): """SQLAlchemy Model for a Table. """ __tablename__ = "some_table" id = sqla.C

我正在学习,我正在阅读的所有教程/相关问题(例如,或)都使用了范例:

import sqlalchemy as sqla

DeclarativeBase = sqla.ext.declarative.declarative_base()

class TableModel(DeclarativeBase):
    """SQLAlchemy Model for a Table.
    """
    __tablename__ = "some_table"

    id = sqla.Column(sqla.Integer, primary_key=True)
    ...

它依赖于声明性数据库的全局实例。这看起来真的很奇怪,因为如果我在许多其他模块/脚本中导入这段代码,实例将在执行过程中的某个随机点创建,并且没有完全定义好。我猜它只是看起来不是pythonic或者糟糕的OOP


这是一个完全有效、坚实的设计,有什么原因吗?或者这只是SQLAlchemy-101版本,还有更健壮的模式吗?

“我想这似乎不是pythonic或糟糕的OOP…”-您最好提供具体的示例来说明您在这个设计中看到的具体问题。否则就不可能回答你的问题。因为对我来说,这似乎是一个很好的设计;)如果它有助于你的审美:你可以创建
meta.py
模块,在那里你可以初始化
引擎
会话
声明性基础
。之后,您可以将其导入到
tablemodel1.py
tablemodel2.py
和其他文件中。更多的结构。“我想它看起来不是pythonic或者糟糕的OOP…”-你最好提供具体的例子来说明你在这个设计中看到的具体问题。否则就不可能回答你的问题。因为对我来说,这似乎是一个很好的设计;)如果它有助于你的审美:你可以创建
meta.py
模块,在那里你可以初始化
引擎
会话
声明性基础
。之后,您可以将其导入到
tablemodel1.py
tablemodel2.py
和其他文件中。更多的结构。