我已经使以下类继承自 BaseModel
from sqlalchemy.orm import DeclarativeBase
from sqlalchemy.orm import relationship, Mapped, mapped_column
class Base(DeclarativeBase):
pass
class Patients(Base):
__tablename__ = 'patients'
patient_id: Mapped[int] = mapped_column(primary_key=True, index=True)
registration_date: Mapped[str] = mapped_column(Date, nullable=True)
user_id: Mapped[int] = mapped_column(Integer, ForeignKey('users.id'), nullable=False)
user = relationship('Users', back_populates='patient') # One-to-one relationship
vitals = relationship('Vitals', back_populates='patient')
class Vitals(Base):
__tablename__ = 'vitals'
id: Mapped[int] = mapped_column(primary_key=True, index=True)
weight_in_kg: Mapped[float] = mapped_column(Float, nullable=True)
height_in_cm: Mapped[float] = mapped_column(Float, nullable=True)
systolic_bp: Mapped[float] = mapped_column(Float, nullable=False)
diastolic_bp: Mapped[float] = mapped_column(Integer, nullable=False)
pulse: Mapped[int] = mapped_column(Integer, nullable=False)
temperature_in_celsius: Mapped[float] = mapped_column(Float, nullable=False)
oxygen_levels: Mapped[int] = mapped_column(Integer, nullable=False)
measurement_dt: Mapped[str] = mapped_column(DateTime, nullable=False, unique=True)
notes: Mapped[str] = mapped_column(String(length=320), nullable=True)
patient_id: Mapped[int] = mapped_column(Integer, ForeignKey('patients.patient_id'), unique=True, nullable=False)
patient = relationship('Patients', back_populates='vitals')
我拥有所有表格,但无法添加生命体征表。
show tables;
+---------------------------+
| Tables_in_clinic_app_auth |
+---------------------------+
| patients |
| roles |
| user_profiles |
| users |
+---------------------------+
我在这里做错了什么?
回答我调试发现的问题,
我运行命令
SHOW CREATE TABLE patients;
并意识到 patinet_id
是 BigInteger
当默认情况下 sqlalchemy orm 试图创建带有整数的外键列时。 所以我将列类型设置为:
patient_id: Mapped[int] = mapped_column(BigInteger, ForeignKey('patients.patient_id'), unique=True, nullable=False)
解决了问题