Python Eve,SQLalchemy和ForeignKey

时间:2015-10-14 11:17:26

标签: python sqlalchemy eve

我正在使用 SQLAlcemy 后端在基于 Python Eve 的RESTful服务中工作。我有两个具有一对多关系的模型:

class User(CommonColumns):

    """Model of an user in the database"""
    __tablename__ = "user"
    id = Column(Integer, primary_key=True)
    username = Column(String, unique=True)
    email = Column(EmailType, unique=True)
    folders = relationship('Folder', backref='user')

    def __unicode__(self):
        return self.username


class Folder(CommonColumns):

    """Model of an user in the database"""
    __tablename__ = "folder"
    id = Column(Integer, primary_key=True)
    name = Column(String, unique=True)
    user_id = Column(Integer, ForeignKey('user.id'), nullable=False)

    def __unicode__(self):
        return "{}/{}".format(self.user.username, self.name)

CommonColumns定义为here

这在插入,更新和删除users时效果很好。但是,我无法插入folders

newfolder = {
'name':'FOLDER',
 'user_id': 1,
}
response = requests.post("http://localhost:8080/api/v1.0/folders",data=newfolder)
print response.json()

{u'_error': {u'code': 422,
  u'message': u'Insertion failure: 1 document(s) contain(s) error(s)'},
 u'_issues': {u'exception': u"'user'"},
 u'_status': u'ERR'}

这是一个相当神秘的错误消息。我一直在阅读 Python Eve 的文档,但我无法理解我做错了什么。我在userfolder插入之间看到的唯一区别是,其中一个有外键。

知道为什么会这样吗?

1 个答案:

答案 0 :(得分:5)

好吧,问题似乎是我没有资源和表名的相同名称("用户"资源,&# 34;用户"用于表名称)。这似乎在前夕引发了外键问题,但对于没有关系的实体不会失败。

更改表名以匹配资源名称解决了问题。

我希望这对任何人都有用。