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?


Ответы (0 шт):