class Job(db.Model): __tablename__ = 'jobs' id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String()) source1 = db.Column(db.String()) source2 = db.Column(db.String()) selectedFields = db.Column(JSON) outputFileName = db.Column(db.String(), unique=True) creator = db.Column( db.Integer, db.ForeignKey('users.id')) # ForeignKey - сязывает Job и User creationDate = db.Column(db.DateTime) metric = db.Column(db.String()) __table_args__ = (UniqueConstraint('creator', 'source1', 'source2', name='unique_creator_with_sources'), ) def __init__(self, name, source1, source2, selected_fields, output_file_name, metric, creator, creation_date=None): self.name = name self.source1 = source1 self.source2 = source2 self.selectedFields = selected_fields self.outputFileName = output_file_name self.metric = metric self.creator = creator if creation_date: self.creationDate = creation_date else: self.creationDate = datetime.utcnow() def __repr__(self): return '<Job: "{}">'.format(self.name) def to_dict(self): job_dict = dict(self.__dict__) job_dict.pop('_sa_instance_state', None) job_dict['creationDate'] = job_dict['creationDate'].isoformat() return job_dict def save(self): db.session.add(self) db.session.commit() def delete(self): db.session.delete(self) db.session.commit()
class MatchedEntities(db.Model): __tablename__ = 'matched_entities' id = db.Column(db.Integer, primary_key=True, autoincrement=True) entity1_id = db.Column(db.Integer, db.ForeignKey('entities.id', ondelete='CASCADE'), primary_key=True) entity2_id = db.Column(db.Integer, db.ForeignKey('entities.id', ondelete='CASCADE'), primary_key=True) jobId = db.Column(db.Integer, db.ForeignKey('jobs.id', ondelete='CASCADE')) __table_args__ = (UniqueConstraint('entity1_id', 'entity2_id', 'jobId', name='unique_matched_entities'), ) def __init__(self, entity1_id, entity2_id, job_id): self.entity1_id = entity1_id self.entity2_id = entity2_id self.jobId = job_id def __repr__(self): return '<Matched Entities: {}, {}>'.format(self.entity1_id, self.entity2_id) def to_dict(self): entity_dict = dict(self.__dict__) entity_dict.pop('_sa_instance_state', None) return entity_dict def save(self): db.session.add(self) db.session.commit() def delete(self): db.session.delete(self) db.session.commit()
class Entity(db.Model): __tablename__ = 'entities' id = db.Column(db.Integer, primary_key=True) jobId = db.Column(db.Integer, db.ForeignKey('jobs.id', ondelete='CASCADE')) isFirstSource = db.Column(db.Boolean) name = db.Column(db.String()) otherFields = db.Column(JSON) isMatched = db.Column(db.Boolean, default=False) __table_args__ = (UniqueConstraint('jobId', 'isFirstSource', 'name', name='unique_entity_in_job'), ) def __init__(self, job_id, is_first_source, name, other_fields): self.jobId = job_id self.isFirstSource = is_first_source self.name = name self.otherFields = other_fields def __repr__(self): return '<Entity: "{}">'.format(self.name) def to_dict(self): entity_dict = dict(self.__dict__) entity_dict.pop('_sa_instance_state', None) return entity_dict def set_as_matched(self): self.isMatched = True db.session.commit() def save(self): db.session.add(self) db.session.commit() def delete(self): db.session.delete(self) db.session.commit()