回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在尝试将患者批量添加到数据库中,但遇到了一个错误。
目标是从请求体读取数据,截断表中的数据并添加新数据。
有人能告诉我我做错了什么吗</p>
<p><strong>代码</strong></p>
<p><em>schemas.py</em></p>
<pre><code>from pydantic import BaseModel
from typing import Optional
class PatientBase(BaseModel):
ticket_id: str
patient_name: Optional[str] = None
class PatientInDb(PatientBase):
patient_id : str
institute :str
class Config:
orm_mode = True
</code></pre>
<p><em>crud.py</em></p>
<pre><code>from typing import List
from sqlalchemy.orm import Session
def create_patients(db: Session, patients: List[schemas.PatientInDb] ):
num_of_deleted_rows = db.query(models.Patient).delete()
db.add_all(patients)
db.commit()
return db.query(models.Patient).count()
</code></pre>
<p><em>patients.py</em></p>
<pre><code>
@router.post("/patients")
async def post_patients(
patients : List[schemas.PatientInDb],
db: Session = Depends(get_db),
):
patients_count = crud.create_patients(db, patients)
return {
"message":f"New {patients_count} patients created."
}
</code></pre>
<p><strong>错误</strong></p>
<pre><code> File ".\app\api\v1\patients.py", line 45, in post_patients
patients_count = crud.create_patients(db, patients)
File ".\app\crud.py", line 13, in create_patients
db.add_all(patients)
File "c:\users\convergytics\miniconda3\envs\test\lib\site-packages\sqlalchemy\orm\session.py", line 2016, in add_all
for instance in instances:
File "c:\users\convergytics\miniconda3\envs\test\lib\typing.py", line 682, in inner
return func(*args, **kwds)
File "c:\users\convergytics\miniconda3\envs\test\lib\typing.py", line 1107, in __getitem__
params = tuple(_type_check(p, msg) for p in params)
File "c:\users\convergytics\miniconda3\envs\test\lib\typing.py", line 1107, in <genexpr>
params = tuple(_type_check(p, msg) for p in params)
File "c:\users\convergytics\miniconda3\envs\test\lib\typing.py", line 374, in _type_check
raise TypeError(msg + " Got %.100r." % (arg,))
TypeError: Parameters to generic types must be types. Got 0.
</code></pre>