यहाँ इस समस्या पर मेरी ले है, यह Louie का उपयोग करता संकेतों प्रेषण करने के लिए:
dispatch.py
"""
Signals dispatching for SQLAlchemy mappers.
"""
import louie
from sqlalchemy.orm.interfaces import MapperExtension
import signals
class LouieDispatcherExtension(MapperExtension):
"""
Dispatch signals using louie on insert, update and delete actions.
"""
def after_insert(self, mapper, connection, instance):
louie.send(signals.after_insert, instance.__class__,
instance=instance)
return super(LouieDispatcherExtension, self).after_insert(mapper,
connection, instance)
def after_delete(self, mapper, connection, instance):
louie.send(signals.after_delete, instance.__class__,
instance=instance)
return super(LouieDispatcherExtension, self).after_delete(mapper,
connection, instance)
def after_update(self, mapper, connection, instance):
louie.send(signals.after_update, instance.__class__,
instance=instance)
return super(LouieDispatcherExtension, self).after_update(mapper,
connection, instance)
def before_delete(self, mapper, connection, instance):
louie.send(signals.before_delete, instance.__class__,
instance=instance)
return super(LouieDispatcherExtension, self).before_delete(mapper,
connection, instance)
def before_insert(self, mapper, connection, instance):
louie.send(signals.before_insert, instance.__class__,
instance=instance)
return super(LouieDispatcherExtension, self).before_insert(mapper,
connection, instance)
def before_update(self, mapper, connection, instance):
louie.send(signals.before_update, instance.__class__,
instance=instance)
return super(LouieDispatcherExtension, self).before_update(mapper,
connection, instance)
signals.py
from louie import Signal
class after_delete(Signal): pass
class after_insert(Signal): pass
class after_update(Signal): pass
class before_delete(Signal): pass
class before_insert(Signal): pass
class before_update(Signal): pass
नमूना उपयोग:
class MyModel(DeclarativeBase):
__mapper_args__ = {"extension": LouieDispatcherExtension()}
ID = Column(Integer, primary_key=True)
name = Column(String(255))
def on_insert(instance):
print "inserted %s" % instance
louie.connect(on_insert, signals.after_insert, MyModel)
क्या बस 'save' अधिभावी के साथ गलत क्या है? –
@ S.Lott एक प्राचीन धागे को पुनर्जीवित करने के लिए खेद है, लेकिन एसक्यूएलकेमी घोषणात्मक मॉड्यूल में 'सेव' विधि की एक ही अवधारणा नहीं है जिसे Django ORM की तरह ओवरराइड किया जा सकता है। एसए में ऑब्जेक्ट्स को सहेजने के लिए, आप उन्हें एक सत्र में जोड़ते हैं और फिर सत्र को फ्लश करते हैं। आप * अपनी घोषणात्मक आधार कक्षा को कार्यान्वित कर सकते हैं और उसी प्रभाव को प्राप्त कर सकते हैं। –
@ जोहोहोले: सहायक होने पर, यह स्पष्ट नहीं करता है कि टैग Django कहता है और शीर्षक SQLAlchemy कहता है। –