2012-12-12 40 views
0

我想弄清楚如何編寫一個鉤子來查詢數據庫之前從ORM插入一行。我希望實現類似於此:SQLAlchemy ORM之前插入鉤子

class Table(Base): 
    id = Column(Integer, primary_key=True) 
    value = Column(Integer, nullable=False) 

    def before_insert_hook(self, session): 
     """Some arbitrary queries and code. For example:""" 
     if self.value is None: 
      self.value = session.query(func.avg(Table.value))\ 
        .filter(Table.value > 100).scalar() 

我在大約ORM事件和這樣的SQLAlchemy的文檔在讀,但我無法弄清楚如何使用它們來實現這一目標。

+0

也許這可以幫助你:http://stackoverflow.com/questions/9706059/setting-a-default-value-in-sqlalchemy –

+0

如果」重新使用PostgreSQL,理論上這可以使用CTE(WITH AS ... INSERT ...)來實現。但它看起來像通過SQLAlchemy還不可能,請參閱公開的問題https://bitbucket.org/zzzeek/sqlalchemy/issue/2551。 – malthe

回答

1

看起來像你想ORM Events

class Table(Base): 
    ... 

@listens_for(Table, 'before_insert') 
def do_stuff(mapper, connect, target): 
    # target is an instance of Table 
    target.value = ...