medicalagent / database.py
Mazoura's picture
Update database.py
ecf82fe verified
Raw
History Blame Contribute Delete
3.77 kB
# database.py
import os
from sqlalchemy import create_engine, Column, Integer, String, Date, Text, DECIMAL, TIMESTAMP, ForeignKey
from sqlalchemy.orm import declarative_base, relationship, sessionmaker
# ------------------------
# Base for models
# ------------------------
Base = declarative_base()
# ------------------------
# Table definitions
# ------------------------
class Patient(Base):
__tablename__ = "Patient"
patient_id = Column(Integer, primary_key=True)
last_name = Column(String, nullable=False)
first_name = Column(String, nullable=False)
date_of_birth = Column(Date, nullable=False)
gender = Column(String, nullable=False)
address = Column(String)
phone = Column(String)
blood_group = Column(String)
social_security_number = Column(String, unique=True)
consultations = relationship("Consultation", back_populates="patient")
medical_records = relationship("MedicalRecord", back_populates="patient")
class Doctor(Base):
__tablename__ = "Doctor"
doctor_id = Column(Integer, primary_key=True)
last_name = Column(String, nullable=False)
first_name = Column(String, nullable=False)
specialty = Column(String, nullable=False)
email = Column(String, unique=True)
department = Column(String)
consultations = relationship("Consultation", back_populates="doctor")
class Consultation(Base):
__tablename__ = "Consultation"
consultation_id = Column(Integer, primary_key=True)
patient_id = Column(Integer, ForeignKey("Patient.patient_id"))
doctor_id = Column(Integer, ForeignKey("Doctor.doctor_id"))
consultation_date = Column(TIMESTAMP)
reason = Column(Text)
weight_kg = Column(DECIMAL(5,2))
blood_pressure = Column(String)
patient = relationship("Patient", back_populates="consultations")
doctor = relationship("Doctor", back_populates="consultations")
diagnoses = relationship("Diagnosis", back_populates="consultation")
class Diagnosis(Base):
__tablename__ = "Diagnosis"
diagnosis_id = Column(Integer, primary_key=True)
consultation_id = Column(Integer, ForeignKey("Consultation.consultation_id"))
icd10_code = Column(String)
description = Column(Text, nullable=False)
severity = Column(String)
consultation = relationship("Consultation", back_populates="diagnoses")
treatments = relationship("Treatment", back_populates="diagnosis")
class Treatment(Base):
__tablename__ = "Treatment"
treatment_id = Column(Integer, primary_key=True)
diagnosis_id = Column(Integer, ForeignKey("Diagnosis.diagnosis_id"))
medication = Column(String)
dosage = Column(String)
start_date = Column(Date)
end_date = Column(Date)
nursing_notes = Column(Text)
diagnosis = relationship("Diagnosis", back_populates="treatments")
class MedicalRecord(Base):
__tablename__ = "MedicalRecord"
record_id = Column(Integer, primary_key=True)
patient_id = Column(Integer, ForeignKey("Patient.patient_id"))
creation_date = Column(Date)
family_history = Column(Text)
allergies = Column(Text)
vaccination_status = Column(Text)
last_update = Column(TIMESTAMP)
patient = relationship("Patient", back_populates="medical_records")
# ------------------------
# Database engine & session
# ------------------------
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
# Connect to medical.db in the same folder
DATABASE_URL = f"sqlite:///{os.path.join(BASE_DIR, 'medical.db')}"
engine = create_engine(DATABASE_URL, connect_args={"check_same_thread": False})
SessionLocal = sessionmaker(autocommit=False, autoflush=False, bind=engine)
# ------------------------
# Create tables if they don't exist
# ------------------------
Base.metadata.create_all(bind=engine)