如何在sqlalchemy before_insert事件中添加模型的关系实例?
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何在sqlalchemy before_insert事件中添加模型的关系实例?相关的知识,希望对你有一定的参考价值。
我想在创建此模型的实例时添加模型关系的实例。
虽然before_insert sqlalchemy事件允许设置简单属性,但它似乎不适用于关系。
这次活动可以做到吗?实现这一目标的标准方法是什么?
audio_project_rel = db.Table(
'audio_project_rel',
db.Column('project_id', db.Integer, db.ForeignKey('project.id'), primary_key=True),
db.Column('audio_id', db.Integer, db.ForeignKey('audio.id'), primary_key=True)
)
class Audio(db.Model):
id = db.Column(db.Integer, primary_key=True)
path = db.Column(db.String, unique=True, nullable=False)
class Project(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String, unique=True, nullable=False)
audiolist_filename = db.Column(db.String, nullable=False)
audios = db.relationship('Audio',
secondary=audio_project_rel,
lazy=True,
backref=db.backref('projects', lazy=True))
@event.listens_for(Project, 'before_insert')
def get_audiolist_from_file(mapper, connection, project):
with open(project.audiolist_filename, 'r') as audiolist_file:
for line in audiolist_file:
_path = line.strip()
audio = Audio.query.filter(Audio.path==_path).first()
if not audio:
audio = Audio()
audio.path = _path
project.audios.append(audio) # not added
project.name = 'somename' # added
答案
似乎不可能:https://docs.sqlalchemy.org/en/latest/orm/session_events.html#session-persistence-mapper
以上是关于如何在sqlalchemy before_insert事件中添加模型的关系实例?的主要内容,如果未能解决你的问题,请参考以下文章