Проблема переноса колбы с ограничением внешнего ключа, отношения «многие к одному» - PullRequest
0 голосов
/ 01 октября 2019

Вот код, который я пытаюсь создать, который создает файл миграции, но не может его обновить.

ConvMaster [Рассматривать это как имя книги] имеет свой идентификатор в качестве внешнего ключа в мастер ответа[Содержание главы]

IntentMaster [Рассматривать как имя главы]

RespMaster [Содержание главы]

ChatHistory [это как библиотека записей , в которой записываются, что читалось, из какой главы и из какой книги]

Для простоты работы я хотел хранить записи вChatHistory вместо того, чтобы запрашивать его у RespMaster. Ошибка - об ограничении внешнего ключа

Пожалуйста, предложите, как это можно сделать или если запрос - это единственный способ сделать это?

class ConvMaster(db.Model):
    __tablename__ = 'convmaster'
    id = db.Column(db.Integer, primary_key=True)
    convName = db.Column(db.String(60), unique = True)
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    resp = db.relationship('RespMaster', backref='conv', lazy='dynamic')
    chat = db.relationship('ChatHistory', backref='chatconv', lazy='dynamic')
    def __repr__(self):
        return '<ConvMaster: {}>'.format(self.convName)

class IntentMaster(db.Model):
    __tablename__ = 'intentmaster'
    id = db.Column(db.Integer, primary_key=True)
    intentName = db.Column(db.String(60), unique = True)
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    resp = db.relationship('RespMaster', backref='intent', lazy='dynamic')
    chat = db.relationship('ChatHistory', backref='chatintent', lazy='dynamic')
    def __repr__(self):
        return '<Intent_Master: {}>'.format(self.intentName)

class RespMaster(db.Model):
    __tablename__ = 'respmaster'
    id = db.Column(db.Integer, primary_key=True)
    convID = db.Column(db.Integer, db.ForeignKey('convmaster.id'), nullable=False)
    intentID = db.Column(db.Integer, db.ForeignKey('intentmaster.id'), nullable=False)
    resp = db.Column(db.String(1000))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    chat = db.relationship('ChatHistory', backref='chatresp', lazy='dynamic')
    def __repr__(self):
        return '<Response_Master: {}>'.format(self.resp)

class ChatHistory(db.Model):
    __tablename__ = 'chathistory'
    id = db.Column(db.Integer, primary_key=True)
    userText = db.Column(db.String(1000), nullable=False)
    convID = db.Column(db.Integer, db.ForeignKey('convmaster.id'))
    intentID = db.Column(db.Integer, db.ForeignKey('intentmaster.id'), nullable=False)
    respID = db.Column(db.Integer, db.ForeignKey('respmaster.id'), nullable=False)
    feedback = db.Column(db.String(5))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    def __repr__(self):
        return '<Chat_History: {}>'.format(self.userText)

Ответ:

Вещи, которые работали для меня.

  1. добавление параметра, foreign_keys на одной стороне, которая является ConvMaster и IntentMaster соответственно в чате и переменной соответственно,в таких случаях это необходимо.

  2. Снятие ограничения nullable = false . Это имело большое влияние на обновление, которое приводило к ошибке ограничения внешнего ключа.

код, который работал здесь

class ConvMaster(db.Model):
    """
    Create a page visit master
    """
    __tablename__ = 'convmaster'
    id = db.Column(db.Integer, primary_key=True)
    convName = db.Column(db.String(60), unique = True)
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    resp = db.relationship('RespMaster', foreign_keys='RespMaster.convID', backref='conv', lazy='dynamic')
    chat = db.relationship('ChatHistory', foreign_keys='ChatHistory.convID', backref='chatconv', lazy='dynamic')
    def __repr__(self):
        return '<ConvMaster: {}>'.format(self.convName)

class IntentMaster(db.Model):
    """
    Create a page visit master
    """
    __tablename__ = 'intentmaster'
    id = db.Column(db.Integer, primary_key=True)
    intentName = db.Column(db.String(60), unique = True)
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    resp = db.relationship('RespMaster', foreign_keys='RespMaster.intentID', backref='intent', lazy='dynamic')
    chat = db.relationship('ChatHistory', foreign_keys='ChatHistory.intentID', backref='chatintent', lazy='dynamic')
    def __repr__(self):
        return '<Intent_Master: {}>'.format(self.intentName)

class RespMaster(db.Model):
    """
    Create a page visit master
    """
    __tablename__ = 'respmaster'
    id = db.Column(db.Integer, primary_key=True)
    convID = db.Column(db.Integer, db.ForeignKey('convmaster.id'))
    intentID = db.Column(db.Integer, db.ForeignKey('intentmaster.id'))
    resp = db.Column(db.String(1000))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    chat = db.relationship('ChatHistory', backref='chatresp', lazy='dynamic')
    def __repr__(self):
        return '<Response_Master: {}>'.format(self.resp)

class ChatHistory(db.Model):
    """
    Create a page visit master
    """
    __tablename__ = 'chathistory'
    id = db.Column(db.Integer, primary_key=True)
    userText = db.Column(db.String(1000), nullable=False)
    convID = db.Column(db.Integer, db.ForeignKey('convmaster.id'))
    intentID = db.Column(db.Integer, db.ForeignKey('intentmaster.id'))
    respID = db.Column(db.Integer, db.ForeignKey('respmaster.id'))
    feedback = db.Column(db.String(5))
    timestamp = db.Column(db.DateTime, index=True, default=datetime.utcnow)
    def __repr__(self):
        return '<Chat_History: {}>'.format(self.userText)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...