Вот код, который я пытаюсь создать, который создает файл миграции, но не может его обновить.
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)
Ответ:
Вещи, которые работали для меня.
добавление параметра, foreign_keys на одной стороне, которая является ConvMaster и IntentMaster соответственно в чате и переменной соответственно,в таких случаях это необходимо.
Снятие ограничения 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)