Anonymous
IntegrityError: повторяющаяся запись для первичного ключа при вставке в таблицу MySQL с использованием SQLAlchemy и PyMy
Сообщение
Anonymous » 26 ноя 2024, 05:49
классы
Код: Выделить всё
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
1732589353
Anonymous
классы [code]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', } [/code] адреса файлов [code]@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')) [/code] [code]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 [/code] входные данные: 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 поля, но почему он сообщает о дубликате ошибка? Я хочу знать, почему выдает ошибку, хотя в поле даты введено другое значение, и как это исправить Подробнее здесь: [url]https://stackoverflow.com/questions/79225169/integrityerror-duplicate-entry-for-primary-key-when-inserting-into-mysql-table[/url]