Как создать запись в нескольких таблицах в peewee? - PullRequest
0 голосов
/ 25 декабря 2018

мои знания о приложениях, управляемых базой данных, и о базе данных ORM крошечные, я написал эту модель в peewee https://codereview.stackexchange.com/q/210293/22943

, и я хочу иметь возможность обновлять 3 таблицы Patient, Relative и PatientAttendOnVisit одновременновремя с внешним ключом Relative и PatientAttendOnVisit для идентификатора пациента в таблице Patient.

Я попытался сделать следующее:

def add_patient_visit(data=None):
    """
    Adds new visit to clinic of patient 
    for new or follow up patient.
    """
    if not data:
        raise ValueError("Please pass the user info.")
    try:
        patient = _clinic.Patient.get(name=data["name"])
        if patient:
            print "Patient exists with same name."
        response_object = {
        "status": "fail",
        "message": "Patient already in record."
        }
        return response_object, 400
    except peewee.DoesNotExist as er:
        patient = _clinic.Patient.create(
            name=data["name"],
            townCity=data["townCity"],
            contactnumber=data["contactnumber"],
            age=data["age"],
            gender=data["gender"],
            email=data["email"],
            postalAddress=data["postalAddress"])
        relative = _clinic.Relative.create(relation=data["relation"],
            relativeName=data["relativeName"])

        attendence = _clinic.PatientAttendOnVisit.create(
            dateTimeofvisit=data["dateTimeofvisit"],
            attendtype=data["attendtype"],
            department=data["department"]
            )

, но при попытке сделать это выдает ошибку ниже:

return файл controller.add_patient_visit (data = data) "/Users/ciasto/Development/python/clinic-backend/app/api/clinic/controller.py", строка 35, в add_patient_visitlativeName = data ["lativeName "]) Файл "/Users/ciasto/Development/python/clinic-backend/clinic_venv/lib/python2.7/site-packages/peewee.py", строка 5580, в файле create inst.save (force_insert = True) "/Пользователи / ciasto / Development / python / clinic-backend / clinic_venv / lib / python2.7 / site-packages / peewee.py ", строка 5727, в файле сохранения pk_from_cursor = self.insert (** field_dict) .execute () File"/ Users / ciasto / Разработка / Пытьhon / clinic-backend / clinic_venv / lib / python2.7 / site-packages / peewee.py ", строка 1622, во внутреннем методе возврата (self, база данных, * args, ** kwargs) Файл" / Users / ciasto / Development/python/clinic-backend/clinic_venv/lib/python2.7/site-packages/peewee.py ", строка 1693, в файле execute return self._execute (database) File" / Users / ciasto / Development / python / clinic-backend/clinic_venv/lib/python2.7/site-packages/peewee.py ", строка 2355, в _execute return super (Вставить, самостоятельно) ._ Выполнить (файл базы данных) Файл" / Users / ciasto / Разработка / python / clinic-backend /clinic_venv / lib / python2.7 / site-packages / peewee.py ", строка 2118, в _execute cursor = database.execute (self) File" / Users / ciasto / Разработка / python / clinic-backend / clinic_venv / lib / python2.7 / site-packages / peewee.py ", строка 2724, при выполнении вернуть файл self.execute_sql (sql, params, commit = commit) Файл" / Users / ciasto / Разработка / python / clinic-backend / clinic_venv / lib / python2.7 / site-packages / peewee.py ", строка 2718, в файле execute_sql self.commit ()" / Users / ciasto / Development / python / clinic-backend / clinic_venv / lib / python2.7 / site-packages / peewee.py ", строка 2509, в exit reraise (файл new_type, new_type (* exc_args), traceback)" / Users / ciasto/Development/python/clinic-backend/clinic_venv/lib/python2.7/site-packages/peewee.py ", строка 2711, в файле execute_sql cursor.execute (sql, params или ())" / Users / ciasto / Development/python/clinic-backend/clinic_venv/lib/python2.7/site-packages/MySQLdb/cursors.py ", строка 205, в файле execute self.errorhandler (self, exc, value) execute" / Users / ciasto / Development /python / clinic-backend / clinic_venv / lib / python2.7 / site-packages / MySQLdb / connections.py ", строка 36, в defaulterrorhandler поднимает errorclass, errorvalue IntegrityError: (1452, 'Невозможно добавить или обновить дочернюю строку: чужойключевое ограничение не выполнено (clinic_backend. relative, CONSTRAINT relative_ibfk_1 ИНОСТРАННЫЙ КЛЮЧ (patient_id) ССЫЛКИ patient (id)) ')

1 Ответ

0 голосов
/ 25 декабря 2018

Ничего особенного, я понял,

def add_patient_visit(data=None):
    """
    Adds new visit to clinic of patient 
    for new or follow up patient.
    """
    if not data:
        raise ValueError("Please pass the user info.")
    patient = _clinic.Patient.create(
            name=data["name"],
            townCity=data["townCity"],
            contactnumber=data["contactnumber"],
            age=data["age"],
            gender=data["gender"],
            email=data["email"],
            postalAddress=data["postalAddress"])

        relative = _clinic.Relative.create(
            patient=patient,
            relation=data["relation"],
            relativeName=data["relativeName"])

        attendence = _clinic.PatientAttendOnVisit.create(
            patient=patient,
            dateTimeofvisit=data["dateTimeofvisit"],
            attendtype=data["attendtype"],
            department=data["department"]
            )
...