Алхимия SQL, как вводить отношения многие-ко-многим при использовании оператора вставки и on_duplicate_key_update ⇐ Python
Алхимия SQL, как вводить отношения многие-ко-многим при использовании оператора вставки и on_duplicate_key_update
Я пытаюсь выполнить запрос к таблице events с отношением многие-ко-многим к таблице company при обработке о дублированном обновлении ключа MYSQL.
Я использую метод вставки Insert().values(), поскольку это единственный метод, который поддерживает функцию обновления on_duplicate_key_update sqlAlchemy, но мне кажется, что нет способа отправить значение связи через это... вот пример:
statement = Insert(EventTableClass).values({ 'имя_события': 'событие1', 'event_coordinator': 'coordinator.inc' 'companies' : [1, 2, 3] # это не сработает, поскольку список нельзя хешировать }) Мой вопрос: как передать атрибут отношения? и в случае дублированного заявления, как объединить 2 массива компаний (сохраненный и новый, удалив дубликаты)?
вот тот случай, когда мы продублировали event_name :
new_companies = [4, 5, 6] # Первичные ключи уже вставленных записей компании дублированный_ключ_оператор = заявление.он_дублировать_ключ_обновление( компании = Statement.inserted.companies + new_companies # это не работает, поскольку не может обрабатывать массивы ) Моим следующим вариантом было выполнить обновление непосредственно в объединяемой таблице, что не работает, поскольку у нас нет информации о данных строки только что сохраненного события после вставки (MYSQL не поддерживает Ключевое слово RETURNING)
# Company_event_table — это таблица соединений, созданная до этого оператора. # мы предполагаем, что мы не помещали массивы в операторы вставки, поэтому выполнение пройдет нормально new_event = self.session.execute (дублированный_ключ_оператор) # выполнение возвращает объект **CursorResult**, который не может получить никаких данных, и всякий раз, когда я # попытайтесь проверить его с помощью new_event.first(), он выдаст следующее исключение: 'Этот объект результата # не возвращает строки. Оно было закрыто автоматически». новые_компании = [4, 5, 6] если новые_компании: для компании в новых_компаниях: вставить(company_event_table).values({ 'company_id': компания, 'event_id': new_event.eventId # это не работает, поскольку **CursorResult** не имеет атрибута eventId }) Я запросилchatGPT (4), и кажется, он предлагает использовать метод session.add() для вставки записей, но это бесполезно для меня, так как мне нужно, чтобы там был оператор дублирования и метод .add() не имеет его (я переключился на операторы вставки именно из-за этого).
Я пытаюсь выполнить запрос к таблице events с отношением многие-ко-многим к таблице company при обработке о дублированном обновлении ключа MYSQL.
Я использую метод вставки Insert().values(), поскольку это единственный метод, который поддерживает функцию обновления on_duplicate_key_update sqlAlchemy, но мне кажется, что нет способа отправить значение связи через это... вот пример:
statement = Insert(EventTableClass).values({ 'имя_события': 'событие1', 'event_coordinator': 'coordinator.inc' 'companies' : [1, 2, 3] # это не сработает, поскольку список нельзя хешировать }) Мой вопрос: как передать атрибут отношения? и в случае дублированного заявления, как объединить 2 массива компаний (сохраненный и новый, удалив дубликаты)?
вот тот случай, когда мы продублировали event_name :
new_companies = [4, 5, 6] # Первичные ключи уже вставленных записей компании дублированный_ключ_оператор = заявление.он_дублировать_ключ_обновление( компании = Statement.inserted.companies + new_companies # это не работает, поскольку не может обрабатывать массивы ) Моим следующим вариантом было выполнить обновление непосредственно в объединяемой таблице, что не работает, поскольку у нас нет информации о данных строки только что сохраненного события после вставки (MYSQL не поддерживает Ключевое слово RETURNING)
# Company_event_table — это таблица соединений, созданная до этого оператора. # мы предполагаем, что мы не помещали массивы в операторы вставки, поэтому выполнение пройдет нормально new_event = self.session.execute (дублированный_ключ_оператор) # выполнение возвращает объект **CursorResult**, который не может получить никаких данных, и всякий раз, когда я # попытайтесь проверить его с помощью new_event.first(), он выдаст следующее исключение: 'Этот объект результата # не возвращает строки. Оно было закрыто автоматически». новые_компании = [4, 5, 6] если новые_компании: для компании в новых_компаниях: вставить(company_event_table).values({ 'company_id': компания, 'event_id': new_event.eventId # это не работает, поскольку **CursorResult** не имеет атрибута eventId }) Я запросилchatGPT (4), и кажется, он предлагает использовать метод session.add() для вставки записей, но это бесполезно для меня, так как мне нужно, чтобы там был оператор дублирования и метод .add() не имеет его (я переключился на операторы вставки именно из-за этого).
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение