我确信之前有过这方面的问题,我只是没有找到合适的关键字......
将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类或在顶部创建新的映射类吗?
答案 0 :(得分:0)
使用继承来实现这一目标:
# Option-1: use ArtistM everywhere
class ArtistM(Artist, Base):
# ...
# Option-2: use Artist everywhere
class Artist(ArtistM):
# ...
我更喜欢选项1,因为它不会使用持久相关信息 类。在您的代码中,您甚至可以使用纯名称导入它们,以便您可以互换使用其他代码:
from mypuremodule import Artist
# or
from mymixedinmodule import ArtistM as Artist
# then use 'Artist` everywhere