Хорошо, после нескольких часов проб и ошибок я нашел решение, плюс кое-что, что я делал не так.
Так работает SQL-алхимия. ответ - слияние.
составляет список тегов в качестве моделей тегов, не имеет значения, существуют ли они, пока ваш первичный ключ является именем или чем-то уникальным.
tags = [Tag('a1'),Tag('a2')]
Скажем, у вас есть тег a1 уже в БД, но нам все равно. Все, что мы хотим, это вставить, если связанных данных не существует. Что делает SQLalchemy?
Теперь вы делаете сообщение со списком всех тегов, которые мы сделали. Если это только один, это также список.
1010 * поэтому *
new_post = Post('a great new post',post_tags=tags)
db.session.merge(new_post)
db.session.commit()
Я использовал синтаксис Flask, но идея та же. Просто убедитесь, что вы не создаете модель вне сеанса. Скорее всего, вы этого не сделаете.
Это было на самом деле просто, но нигде в документации по SQLAlchemy этот пример не упоминается. Они используют append (), что неправильно. Это только для создания новых тегов, зная, что вы не делаете дубликаты.
Надеюсь, это поможет.