adm18/IMPAX/models.py

89 lines
2.4 KiB
Python
Raw Permalink Normal View History

2025-09-16 05:20:19 +00:00
import datetime
from sqlalchemy import Boolean, Column, Date, DateTime, ForeignKey, Integer, String
from sqlalchemy import create_engine
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, sessionmaker
from slugify import slugify
#engine = create_engine('sqlite:///:memory:', echo=True)
engine = create_engine('sqlite:///impax.db', echo=False)
#engine = create_engine('sqlite:////dev/shm/test.db', echo=True)
Base = declarative_base()
'''
['Group', 'View',
'patient.patient_id', 'patient.patient_name', 'patient.patient_name_ph_utf8',
'study.accession_number', 'study.date_time_created', 'study.modality', 'study.num_images', 'study.status', 'study.study_date', 'study.study_description', 'study.study_time']
'''
class Patient(Base):
__tablename__ = 'patient'
patient_id = Column(String, primary_key=True)
patient_name = Column(String)
patient_name_ph_utf8 = Column(String)
counter = Column(Integer)
created = Column(DateTime, default=datetime.datetime.now)
saved = Column(DateTime, onupdate=datetime.datetime.now)
studies = relationship("Study")
class Study(Base):
__tablename__ = 'study'
accession_number = Column(String, primary_key=True)
date_time_created = Column(String)
modality = Column(String)
num_images = Column(Integer)
status = Column(String)
study_date = Column(Date)
study_description = Column(String)
study_time = Column(String)
report = Column(String)
run = Column(String)
success = Column(Boolean)
patient_id = Column(String, ForeignKey('patient.patient_id'))
created = Column(DateTime, default=datetime.datetime.now)
saved = Column(DateTime, onupdate=datetime.datetime.now)
def naming(self):
return f'{self.study_date}_{self.modality}_{self.accession_number}'
class Series(Base):
__tablename__ = 'series'
series_uid = Column(String, primary_key=True)
name = Column(String)
document0 = Column(String)
document1 = Column(String)
accession_number = Column(String, ForeignKey('study.accession_number'))
created = Column(DateTime, default=datetime.datetime.now)
saved = Column(DateTime, onupdate=datetime.datetime.now)
def slugify(self):
return slugify(self.name)
Base.metadata.create_all(engine)
Session = sessionmaker(bind=engine)