Это было мое исправление:
@property
def conversion_number(self):
return 'P0{}'.format(self.id) if self.id < 10 else 'P{}'.format(self.id)
Проблема, похоже, заключалась в том, что id является атрибутом InstrumentedAttribute (не int), когда sqlalchemy инициализирует модель. Это странное поведение, потому что моя реализация существенно не отличается от примера в документации по SQLAlchemy.