gpt4 book ai didi

python - 在 sqlalchemy 中创建数据库时如何摆脱循环依赖错误?

转载 作者:太空狗 更新时间:2023-10-29 18:30:44 28 4
gpt4 key购买 nike

我是 sqlalchemy 的新手。如何消除下表所示的循环依赖错误。基本上我的目标是创建一个问题表,其中包含一对一关系“最佳答案”和一对多关系“possible_answers”。

class Answer(Base):
__tablename__ = 'answers'
id = Column(Integer, primary_key=True)
text = Column(String)

question_id = Column(Integer, ForeignKey('questions.id'))

def __init__(self, text, question_id):
self.text = text

def __repr__(self):
return "<Answer '%s'>" % self.text

class Question(Base):
__tablename__ = 'questions'

id = Column(Integer, primary_key=True)
text = Column(String)
picture = Column(String)
depth = Column(Integer)
amount_of_tasks = Column(Integer)
voting_threshold = Column(Integer)
best_answer_id = Column(Integer, ForeignKey('answers.id'), nullable=True)

possible_answers = relationship("Answer", post_update=True, primaryjoin = id==Answer.question_id)

def __init__(self, text, picture, depth, amount_of_tasks):
self.text = text
self.picture = picture
self.depth = depth
self.amount_of_tasks = amount_of_tasks

def __repr__(self):
return "<Question, '%s', '%s', '%s', '%s'>" % (self.text, self.picture, self.depth, self.amount_of_tasks)

def __repr__(self):
return "<Answer '%s'>" % self.text

这是错误信息:CircularDependencyError:检测到循环依赖。周期:

最佳答案

显然,SQLAlchemy 不能很好地处理循环依赖。您可能会考虑使用关联表来表示最佳答案...

from sqlalchemy import Column, Integer, String, ForeignKey, create_engine
from sqlalchemy import Table
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, sessionmaker

engine = create_engine('sqlite:///:memory:')
Base = declarative_base()


class Answer(Base):
__tablename__ = 'answer'

id = Column(Integer, primary_key=True)
question_id = Column(Integer, ForeignKey('question.id'))
text = Column(String)

question = relationship('Question', backref='answers')

def __repr__(self):
return "<Answer '%s'>" % self.text


class Question(Base):
__tablename__ = 'question'

id = Column(Integer, primary_key=True)
text = Column(String)

best_answer = relationship('Answer',
secondary=lambda: best_answer,
uselist=False)

def __repr__(self):
return "<Question, '%s'>" % (self.text)

best_answer = Table('best_answer', Base.metadata,
Column('question_id',
Integer,
ForeignKey('question.id'),
primary_key=True),
Column('answer_id',
Integer,
ForeignKey('answer.id'))
)


if __name__ == '__main__':

session = sessionmaker(bind=engine)()
Base.metadata.create_all(engine)

question = Question(text='How good is SQLAlchemy?')

somewhat = Answer(text='Somewhat good')
very = Answer(text='Very good')
excellent = Answer(text='Excellent!')

question.answers.extend([somewhat, very, excellent])
question.best_answer = excellent

session.add(question)
session.commit()

question = session.query(Question).first()

print(question.answers)
print(question.best_answer)

关于python - 在 sqlalchemy 中创建数据库时如何摆脱循环依赖错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17753426/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com