我收到以下錯誤
sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL constraint failed: SignalJourneyAudienceConstraints.constraintId
[SQL: INSERT INTO "SignalJourneyAudienceConstraints" ("sourceId", "constraintTypeId", "constraintValue", targeting, frequency, period) VALUES (?, ?, ?, ?, ?, ?)]
[parameters: (None, 10, 'STRING', 1, None, None)]
嘗試使用以下端點時。我已經制作了所有欄位,除了:
- 約束型別 ID:int
- 約束值:str
- 目標:布爾
暫時作為可選。
端點
# mail.py
...
@app.post("/add-new-audience-constraint", status_code=status.HTTP_200_OK)
def add_new_audience_constraint(
sjac: schema.SignalJourneyAudienceConstraints, db: Session = Depends(get_db)
):
"""Sets the main query data."""
new_audience_constraint = models.SignalJourneyAudienceConstraints(
constraintTypeId=sjac.constraintTypeId,
constraintValue=sjac.constraintValue.upper(),
targeting=True,
)
db.add(new_audience_constraint)
db.commit()
return {"message": "Data added successfully."}
模型
# models.py
class SignalJourneyAudienceConstraints(Base):
"""Signal Journey Audience Constraints"""
__tablename__ = "SignalJourneyAudienceConstraints"
constraintId = Column(Integer, primary_key=True)
audienceId = Column(
Integer,
ForeignKey("SignalJourneyAudiences.audienceId"),
primary_key=True,
)
sourceId = Column(Integer, ForeignKey("SignalJourneySources.sourceId"))
constraintTypeId = Column(
Integer, ForeignKey("SignalJourneyConstraintType.constraintTypeId")
)
constraintValue = Column(String)
targeting = Column(Boolean)
frequency = Column(Integer)
period = Column(Integer)
架構
# schema.py
class SignalJourneyAudienceConstraints(BaseModel):
"""SignalJourneyAudienceConstraints BaseModel."""
constraintId: Optional[int] # PK
audienceId: Optional[int] # FK - SignalJourneyAudiences -> audienceId
sourceId: Optional[int] # FK - SignalJourneySources -> sourceId
constraintTypeId: int # FK - SignalJourneyConstraintType -> constraintTypeId
constraintValue: str
targeting: bool
frequency: Optional[int]
period: Optional[int]
class Config:
"""config class"""
orm_mode = True
我研究了其他 SO 問題,但似乎沒有一個適合我所經歷的。希望有人可以解釋發生了什么以及如何解決它
ERD

uj5u.com熱心網友回復:
您有兩個欄位列為primary_key;它們都是主鍵嗎?由于您有兩個欄位,因此主鍵欄位不會自動定義為自動遞增欄位;因為你只想有一個主鍵,整數欄位。
SQLAlchemy 只會在只有一個主鍵列并且它被定義為 integer 時auto_increment自動設定 SQLite 的屬性。
由于定義復合鍵不是您想要的,因此使用constraintId單個自動遞增鍵(如您的 ERD 中所示)是您想要的 - 洗掉欄位的primary_key條目audienceId。
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/434089.html
標籤:Python sqlite sqlalchemy 快速API
上一篇:SQL-如何從一列中減去值
