【问题标题】:Separating SQLAlchemy mapping class from functional class in python在python中将SQLAlchemy映射类与函数类分开
【发布时间】:2015-10-24 18:37:54
【问题描述】:

我确定以前有过关于此的问题,我只是没有搜索正确的关键字...

将 ORM 映射类与应用程序中用于处理的类分开是好还是坏?

例如:

class Artist:
    def __init__(self, name, age, genre):
        self.name  = name
        self.age   = age
        self.genre = genre
        self.score = None # Calculated in real-time, never stored to DB

class ArtistM(Base):
    __tablename__ = "artists"
    name          = Column(String(50))
    age           = Column(Integer)
    genre         = Column(String(50))

可以想象的好处是使主要应用程序使用的类完全没有 ORM 东西。例如,假设我创建了一个 Artist 类和一整套在该类上运行的工具。稍后,我想开始处理大量这些对象并决定添加一个数据库组件。我是想回去修改原来的 Artist 类还是在上面创建新的映射类?

【问题讨论】:

    标签: python orm sqlalchemy


    【解决方案1】:

    使用继承来实现:

    # Option-1: use ArtistM everywhere
    class ArtistM(Artist, Base):
        # ...
    
    # Option-2: use Artist everywhere
    class Artist(ArtistM):
        # ...
    

    我更喜欢选项 1,因为它不会 blotter 您的 pure 类与持久的相关信息。在您的代码中,您甚至可以使用 pure 名称导入它们,以便您可以互换使用其他代码:

    from mypuremodule import Artist
    # or
    from mymixedinmodule import ArtistM as Artist
    # then use 'Artist` everywhere
    

    【讨论】:

      猜你喜欢
      • 2013-12-29
      • 1970-01-01
      • 1970-01-01
      • 2020-05-16
      • 2014-05-07
      • 2023-01-29
      • 2013-08-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多