Flask SQLAlchemy需要帮助将3个类映射到一起

2024-06-02 07:13:43 发布

您现在位置:Python中文网/ 问答频道 /正文

所以我花了一些时间在这上面,一直在兜圈子,一无所获,所以我想我应该去找专家!在

使用Flask 0.9SQLAlchemy 0.7.9我试图创建一个包含多个图库集合的库页面。每个库都有一个子库集合,每个子库都有一个照片集合。下面显示的第一次尝试显然不起作用:

class Gallery(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(64))
    subgals = db.relationship('SubGallery', backref='author', lazy='dynamic')

    def __repr__(self):
        return '<Gallery - %r>' % (self.title)


class SubGallery(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(64))
    photos = db.relationship('Photo', backref='author', lazy='dynamic')
    gallery_id = db.Column(db.Integer, db.ForeignKey('gallery.id'))

    def __repr__(self):
        return '<Gallery - %r>' % (self.title)


class Photo(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(64))
    href = db.Column(db.String(128))
    subgallery_id = db.Column(db.Integer, db.ForeignKey('subgallery.id'))

    def __repr__(self):
        return '<Photo - %r>' % (self.title)

并返回以下错误:

^{pr2}$

我一直在研究另一种关系配置,但不是100%确定我需要什么。 我的直觉告诉我我需要一个Adjacency Relationship,但我还没能走多远。我尝试了一个多对多的映射,但是我没有看到多少关于如何将3个类映射到一起的材料。在

我真的很感谢你们提供的任何意见和见解,谢谢!!在


Tags: keyselfidtruedbstringmodeltitle
1条回答
网友
1楼 · 发布于 2024-06-02 07:13:43

我认为你建立了一个很好的数据库。在

来自SQLAlchemy的“无法确定…”错误只是说您的模型中没有足够的信息让SQLAlchemy知道子库和照片表之间的关系的连接条件是什么。在

SQLAlchemy试图从你如何命名事物来猜测很多事情,它期望一致性。我相信在本例中,由于您使用camel caseSubGallery,它没有找到它需要的东西。在

如错误消息所示,您可以向关系添加显式primaryjoin参数,然后SQLAlchemy会很高兴,或者您可以更改名称来帮助SQLAlchemy自己解决它。在

我已经修改了您的定义,将SubGallery重命名为'Subgallery',这似乎很管用。以下是修改后的车型:

class Gallery(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(64))
    subgals = db.relationship('Subgallery', backref='author', lazy='dynamic')

    def __repr__(self):
        return '<Gallery - %r>' % (self.title)


class Subgallery(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(64))
    photos = db.relationship('Photo', backref='author', lazy='dynamic')
    gallery_id = db.Column(db.Integer, db.ForeignKey('gallery.id'))

    def __repr__(self):
        return '<Gallery - %r>' % (self.title)


class Photo(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(64))
    href = db.Column(db.String(128))
    subgallery_id = db.Column(db.Integer, db.ForeignKey('subgallery.id'))

    def __repr__(self):
        return '<Photo - %r>' % (self.title)

我用了一个小小的快速而肮脏的测试脚本来确保关系正常运行:

^{pr2}$

相关问题 更多 >