sqlalchemy Через .add() по relationship создается новая строка в связанной таблице, а хотелось бы поведение create if not exist
Модель продуктов:
class Product(Base):
__tablename__ = 'product'
id = Column(Integer, primary_key=True, nullable=False)
name = Column(String(250), nullable=False, comment='')
articul = Column(String(40), nullable=False, comment='')
price = Column(Float, nullable=False, comment='')
instock = Column(String(40), nullable=True, comment='')
city_id = Column(Integer, ForeignKey(City.id), comment='')
Модель заранее созданной таблицы с перечнем городов:
class City(Base):
__tablename__ = 'city'
id = Column(Integer, primary_key=True, nullable=False)
city = Column(String(10), nullable=False, comment='')
relation = relationship('Product', backref="city")
Вот так добавляю новый продукт, но это так же приводит и к добавлению нового города:
test = City(city='Москва')
async with async_session() as session:
session.add(Product(
name='Кукла',
articul='ОВ1245',
price=100,
instock='в наличии',
# city_id=test.id, # ТАК НИЧЕГО НЕ ВСТАВЛЯЕТ
city=City(city='Москва'), # ТАК ВСЕГДА СОЗДАЕТ новую строку с новой Москвой
))
То есть если бы я знал id города, я бы сразу вставлял его в city_id. Но мне для этого нужно сделать предварительный запрос в БД. Получается все же надо сначала делать запрос в таблицу city?