Python SQLAlchemy 0.7 MapperEvent错误
我有一个模型Python SQLAlchemy 0.7 MapperEvent错误,python,sqlalchemy,Python,Sqlalchemy,我有一个模型 class CreatedMixin(object): __abstract__ = True @declared_attr def created_by(cls): return Column(Integer, ForeignKey('user.user_id', onupdate="cascade", ondelete="restrict")) @declared_attr
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
要自动填充由创建的字段并更新,我使用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'
出什么问题了?问题很简单,我在模型中使用了Mixin,无意中添加到属性的基本模型
\uuuuuuu abstract\uuuu=True
例如:
但是在SQLAlchemy 0.6中,它运行良好。也许这是一个0.6的bug。
更新:更多信息问题很简单,我在模型中使用了一个Mixin,无意中添加到属性的基本模型
\uuuuu abstract\uuuu=True
例如:
但是在SQLAlchemy 0.6中,它运行良好。也许这是一个0.6的bug。
更新:有关更多信息,您提供的信息不足以找到错误源。请在这里发回追踪。
Base
类是否正确创建?模块myapp.model
是否在执行导致错误的代码之前导入?跟踪:我注意到升级到0.7版本后,不再确定模型。当我在0.6版本上通过粘贴设置应用程序初始化数据库时,工作正常,但0.7不创建表。您提供的信息不足以找到错误源。请在这里发回追踪。Base
类是否正确创建?模块myapp.model
是否在执行导致错误的代码之前导入?跟踪:我注意到升级到0.7版本后,不再确定模型。当我在0.6版本上通过粘贴设置应用程序初始化数据库时,工作正常,但0.7不创建表。
from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker, scoped_session
engine = create_engine('sqlite:///:memory:', echo=True)
Base = declarative_base(bind=engine)
Session = scoped_session(sessionmaker(engine))
class Mix(object):
__abstract__ = True
id = Column(Integer, autoincrement=True, primary_key=True)
class User(Base, Mix):
__tablename__ = 'users'
name = Column(String)
fullname = Column(String)
password = Column(String)
Base.metadata.create_all()
u = User()
print u