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

Python Flask SQLAlchemy-需要帮助将3个类映射到一起吗,python,sqlalchemy,flask,flask-sqlalchemy,flask-extensions,Python,Sqlalchemy,Flask,Flask Sqlalchemy,Flask Extensions,所以我花了一些时间在这上面,一直在兜圈子,一无所获,所以我想我应该去找专家 使用Flask 0.9和SQLAlchemy 0.7.9我试图创建一个包含库的集合的库页面。每个图库都有一组子图库,每个子图库都有一组照片。下面显示的我的第一次尝试显然不起作用: class Gallery(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(64)) subgals

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

使用
Flask 0.9
SQLAlchemy 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)
我一直在研究其他关系配置,但不是100%确定我需要什么。 我的直觉告诉我我需要一个
邻接关系
,但我还没能走得很远。我尝试了一个多对多映射,但是我没有看到太多关于如何将3个类映射在一起的材料


我真的很感谢你们所有人对此提出的意见和见解,谢谢

我认为您的数据库设置正确,您有两个一对多关系,这似乎很好

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

SQLAlchemy试图从您如何命名事物来猜测很多事物,它期望一致性。我相信在这种情况下,由于您使用了camel case
子库
,它找不到它需要的东西

如错误消息所示,您可以向关系中添加一个explicity
primaryjoin
参数,然后SQLAlchemy会很高兴,或者您可以更改名称以帮助SQLAlchemy自己解决这个问题

我已通过将
子库
重命名为“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)

对非常感谢你!工作得很有魅力:D
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)
db.create_all()
g = Gallery(title = "a")
db.session.add(g)
db.session.commit()
sg = Subgallery(title = "a1", author = g)
db.session.add(sg)
db.session.commit()
p = Photo(title = "a1p", href="href", author = sg)
db.session.add(p)
db.session.commit()
for subgal in g.subgals.all():
    print subgal
    print subgal.author
    for photo in subgal.photos.all():
        print photo
        print photo.author