【发布时间】:2012-05-24 02:38:52
【问题描述】:
我有模特
class CreatedMixin(object):
__abstract__ = True
@declared_attr
def created_by(cls):
return Column(Integer, ForeignKey('user.user_id',
onupdate="cascade", ondelete="restrict"))
@declared_attr
def updated_by(cls):
return Column(Integer, ForeignKey('user.user_id',
onupdate="cascade", ondelete="restrict"))
created_at = Column(DateTime, nullable=False, default=dt.now())
updated_at = Column(DateTime, nullable=False, default=dt.now(),
onupdate=dt.now())
class Net(Base, CreatedMixin):
"""Net or subnet."""
cidr = Column(postgresql.CIDR, index = True)
description = Column(UnicodeText())
parent_id = Column(Integer, ForeignKey('net.id'))
parent = relationship("Net", remote_side="Net.id")
def __init__(self, cidr=''):
self.cidr = cidr
def __repr__(self):
return "%s" % self.cidr
要自动填充 created_by 和 update_by 字段,我使用 sqlalchemy.orm.events.MapperEvents (SQLAlchemy 0.7),如下所示:
def created_before_insert_listener(mapper, connection, target):
# execute a stored procedure upon INSERT,
# apply the value to the row to be inserted
#target.calculated_value = connection.scalar(
# "select my_special_function(%d)"
# % target.special_number)
target.updated_by = 1
# associate the listener function with CreatedMixin,
# to execute during the "before_insert" hook
event.listen(CreatedMixin, 'before_insert', created_before_insert_listener)
但运行应用程序后,得到以下错误但未映射
sqlalchemy.orm.exc.UnmappedClassError: Class 'myapp.model.Net'
怎么了?
【问题讨论】:
-
您提供的信息不足以找到错误来源。请在此处发布回溯。
Base类是否创建正确?模块myapp.model是否在导致错误的代码执行前导入? -
我注意到升级到0.7版本后不再确定型号。当我在 0.6 版本上通过 paste setup-app 初始化数据库时工作正常,但 0.7 不创建表。
标签: python sqlalchemy