我应该使用单个类来放置SQLAlchemy表规范和业务逻辑吗?

时间:2017-05-02 14:24:41

标签: python sqlalchemy

我有一份合同来代表我的合同:

... / mypackage的/ Contract.py

class Contract:

    # setter and getters.

    def isValid( self, contract_number=None ):
        #code

    def cancelTheContract( self, contract_number=None ):
        # code

我的SQLAlchemy Contract类:

... / mypackage的/ orm.py

from sqlalchemy import create_engine
from sqlalchemy import MetaData
from sqlalchemy import Column, ForeignKey, Integer, String, Table
from sqlalchemy.orm import *
from sqlalchemy.ext.declarative import declarative_base

db = create_engine( 'mysql://myuser:mypasswd@localhost/mydatabase' )

contracts = Table( 'contracts', MetaData( bind = None ) )

class Connection:

    def connect( self ):
        Session = sessionmaker( bind = db )
        session = Session()
        return session

class Contract( Base ):
    __tablename__ = 'contracts'

    id = Column( Integer, primary_key = True )
    type = Column( String )
    price = Column( Float )

因此...

将两个Contract类合并为一个可以吗?

如果没有,我必须实例化一个特定于数据库表的类和另一个特定于业务逻辑的类,所以当我必须处理数据库数据,操纵它并把它放回去时,我必须处理两个对象这基本上就是事情。

嗯......我想我在这里错过了一些重要的概念。

我应该阅读什么才能更好地理解我的问题含义?

谢谢! 吉奥

1 个答案:

答案 0 :(得分:0)

是的,ORM的理念是将物理表映射到业务实体对象,因此最好将两个类组合在一起。 SQLA属性管理实体的持久字段,您可以根据标准的面向对象建模技术封装该类中的所有业务逻辑。