所以我现在对我的模型有问题。我遇到了这两个(1)(2)问题给了我很多帮助,但现在我被卡住了。这是我目前的代码:
class Post(Base):
__tablename__ = 'post'
id = Column(Integer, primary_key=True)
type = Column('type', String(10))
created = Column(TIMESTAMP(), default=datetime.now())
updated = Column(TIMESTAMP(), default=datetime.now())
poster_id = Column(Integer, ForeignKey('person.id'))
poster = relationship('Person', backref=backref('posts'))
__mapper_args__ = {'polymorphic_on': type}
class Comment(Post):
__tablename__ = 'comment'
__mapper_args__ = {'polymorphic_identity': 'comment', 'inherit_condition': (id == Post.id)}
id = Column(Integer, ForeignKey('post.id'), primary_key=True)
post_id = Column(Integer, ForeignKey('post.id'))
post = relationship('Post', primaryjoin=('Comment.post_id == Post.id'), backref=backref('comments'), remote_side='Post.id')
text = Column(Text)
我得到的当前错误是:
TypeError: Incompatible collection type: int is not list-like
我做错了什么?感谢。
答案 0 :(得分:3)
id
是列的一个非常不幸的名字; id
是一个内置函数,因此总是定义。如果您为主键选择了一个不那么主流的名称,那么您会看到一个不同的错误,这很明显;
class Comment(Post):
__tablename__ = 'comment'
__mapper_args__ = {'polymorphic_identity': 'comment', 'inherit_condition': (id == Post.id)}
# ^^
id
引用__builtins__.id
,这是一个返回python对象地址的函数。可能不是你的意思。
简易解决方案:将__mapper_args__
移到您别名id
的行下方,以表示您的实际表格列。