#python #sqlalchemy
Вопрос:
Я использую Python и SQLAlchemy для подключения к базе данных MYSQL.
То, что у меня есть, — это членство в типе, тип членства в типе и отношения. Членство имеет список типов членства, называемый «listMembershipTypeObjects». Они оба подключены к базе данных MYSQL через ассоциативную таблицу, называемую «Ассоциативные_мембершип_мембершиптипы». Это выглядит так:
CREATE TABLE `associationtable_membership_membershiptypes` (
`ID` int NOT NULL AUTO_INCREMENT,
`MembershipID` int DEFAULT NULL,
`MembershipTypeID` int DEFAULT NULL,
PRIMARY KEY (`ID`),
KEY `MembershipID` (`MembershipID`),
KEY `MembershipTypeID` (`MembershipTypeID`),
CONSTRAINT `associationtable_membership_membershiptypes_ibfk_1` FOREIGN KEY (`MembershipID`) REFERENCES `memberships` (`ID`),
CONSTRAINT `associationtable_membership_membershiptypes_ibfk_2` FOREIGN KEY (`MembershipTypeID`) REFERENCES `membershiptypes` (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;
Существует несколько типов членства, таких как «Бронзовый» и «Серебряный».
Вот ключевая часть: некоторые членства могут содержать более одного типа членства одного и того же типа. Так, например, объекты listMembershipTypeObjects участника могут содержать «Серебро», «Серебро». Я могу добавить этот тип членства дважды в свою программу на Python, но когда я фиксирую, он добавляет только одну запись в таблицу ассоциаций. Я надеялся, что это сработает, так как я не сделал идентификатор участника или идентификатор типа участника уникальными (и они не уникальны как комбинация).
Я проверил список в строке перед инструкцией commit, и он говорит мне, что у меня есть два элемента в списке (в данном случае оба «Серебряные»), но затем, когда я проверяю базу данных, в таблице ассоциаций отображается только один элемент. Это правильный выбор, но есть только один, где я хотел бы, чтобы было два.
Это просто случай, когда я где-то ошибаюсь, или мне нужно что-то изменить, чтобы сделать такое поведение правильным?
Также, похоже, возникла проблема с получением данных. Я сам пытался добавить эту дублирующуюся запись (я должен сказать, что в этом руководстве не было ошибки при добавлении):
ID: 1 MembershipID: 7 MembershipTypeID: 2
ID: 2 MembershipID: 7 MembershipTypeID: 2
Это все, что содержит таблица ассоциаций, просто для уверенности. Когда я получу все записи о членстве, я смогу просмотреть запись 7 и просмотреть ее список. Один пункт. Боже мой, почему.
Комментарии:
1. «Я могу добавить этот тип членства дважды в свою программу на Python» — Вы создаете один объект типа членства и добавляете его дважды, или вы создаете два разных объекта типа членства, которые оба имеют один и тот же дескриптор («Серебро»)? Если вы добавите один и тот же объект (например,
<__main__.MembershipType object at 0x000000409BE9B9D0>
дважды), то SQLAlchemy, вероятно, распознает, что это один и тот же объект, и обманет их.2. Да, один и тот же тип добавлен дважды.
3. Что ж, я добавлю еще одно, чтобы внести ясность. Один и тот же объект, одно и то же местоположение в памяти для двух типов членства в списке.