IntegrityError: повторяющаяся запись для первичного ключа при вставке в таблицу MySQL с использованием SQLAlchemy и PyMyPython

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 IntegrityError: повторяющаяся запись для первичного ключа при вставке в таблицу MySQL с использованием SQLAlchemy и PyMy

Сообщение Anonymous »

классы

Код: Выделить всё

class ExamSchedule(db.Model):
exam_time_id = Column(Integer, ForeignKey('exam_time.id'), nullable=False,primary_key=True)
doctor_id = Column(Integer, ForeignKey('doctor.id'), nullable=False,primary_key=True)
date = Column(Date, nullable=False,primary_key=True)
is_book = Column(Boolean, nullable=False, default=True)
exam_registration_id = Column(Integer, ForeignKey('exam_registration.id', ondelete='CASCADE'), nullable=False,unique=True)

class ExamTime(db.Model):
id = Column(Integer, primary_key=True)
start_time = Column(db.Time, nullable=False)
end_time = Column(db.Time, nullable=False)
exam_dates = db.relationship('ExamSchedule', backref='exam_time', lazy = True)

class ExamRegistration(db.Model):
id = Column(Integer, primary_key=True, )
symptom = Column(String(255), nullable = True)
exam_schedule = relationship("ExamSchedule", backref="exam_registration", uselist=False)
patient_id = Column(Integer, ForeignKey('patient.id'),nullable = False)
doctor_id = Column(Integer, ForeignKey('doctor.id'),nullable = False)
is_waiting = Column(Boolean, default=True)
doctor = relationship("Doctor", backref="exam_registrations")

class User(db.Model):
id = Column(Integer, primary_key=True)
last_name = Column(String(50), nullable=False)
first_name = Column(String(50), nullable=False)
gender = Column(String(50))
birth_day = Column(Date)
email = Column(String(50), unique=True, nullable=False)
image = Column(String(255), nullable=True)

phone_numbers = relationship(
'PhoneNumber',
backref='user',
cascade='all, delete-orphan',
lazy=True
)

account_id = Column(Integer, ForeignKey('account.id', ondelete='CASCADE'), nullable=False, unique=True)
role = Column(String(50), nullable=False, default="user")  # Thêm trường role
__mapper_args__ = {
'polymorphic_identity': 'user',  # Loại mặc định
'polymorphic_on': role          # Dựa vào `role` để phân biệt vai trò
}

class Doctor(User):
id = Column(Integer, ForeignKey('user.id', ondelete='CASCADE'), primary_key=True)
specialty = Column(String(100), nullable=True)
degree = Column(String(100), nullable=True)
experience = Column(String(100),nullable=True)
current_workplace = Column(String(100),nullable=True)
exam_dates = relationship('ExamSchedule', backref='doctor', lazy=True)

__mapper_args__ = {
'polymorphic_identity':  'doctor',
}

адреса файлов

Код: Выделить всё

@login_required
def confirm_appoint():
if request.method == 'POST':
if not current_user.is_authenticated:
return redirect(url_for('auth.user_login'))
else:
doctor_id = request.form.get('doctor_id')
exam_time_id =request.form.get('exam_time_id')
symptom = str(request.form.get('symptom'))
exam_day = datetime.strptime(request.form.get('exam_day'),  "%Y-%m-%d %H:%M:%S").date()
if not check_existing_schedule(exam_time_id,doctor_id,exam_day):
exam_registration = add_apointment(symptom=symptom, doctor_id=doctor_id, patient_id=current_user.user.id)
add_exam_scheduled(exam_time_id,doctor_id,exam_day, exam_registration.id)
return redirect(url_for('appointment.appointment_main'))

Код: Выделить всё

def add_apointment(symptom, doctor_id, patient_id):
new_exam_registration = ExamRegistration(
symptom=symptom,
doctor_id=doctor_id,
patient_id=patient_id,
)
db.session.add(new_exam_registration)
db.session.commit()
return new_exam_registration

def add_exam_scheduled(exam_time_id,doctor_id,date, exam_registration_id):

new_exam_scheduled = ExamSchedule(
exam_time_id=exam_time_id,
doctor_id=doctor_id,
date=date,
is_book=True,
exam_registration_id=exam_registration_id
)
db.session.add(new_exam_scheduled)
db.session.commit()
def check_existing_schedule(exam_time_id,doctor_id,date):
existing_schedule = db.session.query(ExamSchedule).filter_by(exam_time_id=exam_time_id, doctor_id=doctor_id, date=date).first()
if existing_schedule:
return True
else:
return False

входные данные:
1:exam_time_id=1, Doctor_id=6, дата = 25.11.2024
2:example_time_id=1, Doctor_id=6, дата = 2024-11-26
ошибки: (pymysql.err.IntegrityError) (1062, «Дубликат записи '1-6' для ключ 'exam_schedule.PRIMARY'") [SQL: INSERT INTO exam_schedule (exam_time_id, Doctor_id, date, is_book,exam_registration_id) ЗНАЧЕНИЯ (%(exam_time_id)s, %(doctor_id)s, %(date)s, %(is_book)s , %(exam_registration_id)s)] [параметры: {'exam_time_id': '1', 'doctor_id': '6', 'date': datetime.date(2024, 11, 26), 'is_book': 1, 'exam_registration_id': 38}] (История этой ошибки по адресу: https://sqlalche.me/e/20/gkpj)
Почему в качестве первичного ключа есть 3 поля, но почему он сообщает о дубликате ошибка?
Я хочу знать, почему выдает ошибку, хотя в поле даты введено другое значение, и как это исправить

Подробнее здесь: https://stackoverflow.com/questions/792 ... ysql-table
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Python»