@Lepilov

Как сформировать связь многое к одному в SQLAlchemy?

Есть две взаимосвязанных модели
models.py
class ImageGroup(db.Model):
    __tablename__ = 'imagegroup'
    id = db.Column(db.Integer, primary_key=True)
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)


class Images(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    img_filename = db.Column(db.String())
    counter = db.Column(db.Integer(), default=0)
    img_data = db.Column(db.String(264), unique=False)
    creation_date = db.Column(db.DateTime, default=datetime.now())
    imagegroup_id = db.Column(db.Integer, db.ForeignKey('imagegroup.id'), nullable=False)
    imagegroup = db.relationship('Images', backref='images', lazy=True)


Мне надо сделать что бы при выполнении функции upload_images формировался один экземпляр ImageGroup и присваивался всем экземплярам Images из цикла for.
upload_images.py
result_img = job.result
                imagegroup = ImageGroup()
                db.session.add(imagegroup)
                db.session.commit()
                for i in result_img:
                    info = job.result[i]
                    filename = (info['name'])
                    count = info["count"]
                    img_data = info['path']
                    new_file = Images(img_filename=filename, counter=count, img_data=img_data, imagegroup_id=imagegroup)
                    db.session.add(new_file)
                    db.session.commit()
                session['result'] = result_img


Вместо imagegroup_id=imagegroup пробовал imagegroup=imagegroup но в результате ошибка

"specify a 'primaryjoin' expression." % self.prop
sqlalchemy.exc.NoForeignKeysError: Could not determine join condition between parent/child tables on relationship Images.imagegroup - there are no foreign keys linking these tables.  Ensure that referencing columns are associated with a ForeignKey or ForeignKeyConstraint, or specify a 'primaryjoin' expression.

Подскажите как делаются такие взаимосвязи?
  • Вопрос задан
  • 172 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы