docs: def save(self, must_create=False):
          """
          Saves the current session data to the database. If 'must_create' is
          True, a database error will be raised if the saving operation doesn't
          create a *new* entry (as opposed to possibly updating an existing
          entry).
          """
          obj = Session(
              session_key=self._get_or_create_session_key(),
              session_data=self.encode(self._get_session(no_load=must_create)),
              expire_date=self.get_expiry_date(),
              user_agent=self.user_agent,
              user_id=self.user_id,
              ip=self.ip,
          )
          using = router.db_for_write(Session, instance=obj)
          try:
              with transaction.atomic(using):
                  obj.save(force_insert=must_create, using=using)
          except IntegrityError as e:
              if must_create and 'session_key' in str(e):
                  raise CreateError
              raise