def copy(self, sql, data, **kwargs): if self.closed(): raise errors.Error('Cursor is closed') self.flush_to_query_ready() self.connection.write(messages.Query(sql)) while True: message = self.connection.read_message() if isinstance(message, messages.ErrorResponse): raise errors.QueryError.from_error_response(message, sql) self.connection.process_message(message=message) if isinstance(message, messages.ReadyForQuery): break elif isinstance(message, messages.CopyInResponse): #write stuff if not hasattr(data, "read"): self.connection.write(messages.CopyData(data)) else: # treat data as stream self.connection.write(messages.CopyStream(data, **kwargs)) self.connection.write(messages.CopyDone()) if self.error is not None: raise self.error
def _copy_internal(self, sql, datagen): if self.closed(): raise errors.Error('Cursor is closed') self.connection.write(messages.Query(sql)) while True: message = self.connection.read_message() if isinstance(message, messages.ErrorResponse): raise errors.QueryError.from_error_response(message, sql) elif isinstance(message, messages.ReadyForQuery): break elif isinstance(message, messages.CopyInResponse): # write stuff for line in datagen: self.connection.write(messages.CopyData(line)) self.connection.write(messages.CopyDone())
def copy(self, sql, data): if self.closed(): raise errors.Error('Cursor is closed') self.connection.write(messages.Query(sql)) while True: message = self.connection.read_message() self._process_message(message=message) if isinstance(message, messages.ReadyForQuery): break elif isinstance(message, messages.CopyInResponse): #write stuff self.connection.write(messages.CopyData(data)) self.connection.write(messages.CopyDone()) if self.error is not None: raise self.error