<html><body>
<style>

body, h1, h2, h3, div, span, p, pre, a {
  margin: 0;
  padding: 0;
  border: 0;
  font-weight: inherit;
  font-style: inherit;
  font-size: 100%;
  font-family: inherit;
  vertical-align: baseline;
}

body {
  font-size: 13px;
  padding: 1em;
}

h1 {
  font-size: 26px;
  margin-bottom: 1em;
}

h2 {
  font-size: 24px;
  margin-bottom: 1em;
}

h3 {
  font-size: 20px;
  margin-bottom: 1em;
  margin-top: 1em;
}

pre, code {
  line-height: 1.5;
  font-family: Monaco, 'DejaVu Sans Mono', 'Bitstream Vera Sans Mono', 'Lucida Console', monospace;
}

pre {
  margin-top: 0.5em;
}

h1, h2, h3, p {
  font-family: Arial, sans serif;
}

h1, h2, h3 {
  border-bottom: solid #CCC 1px;
}

.toc_element {
  margin-top: 0.5em;
}

.firstline {
  margin-left: 2 em;
}

.method  {
  margin-top: 1em;
  border: solid 1px #CCC;
  padding: 1em;
  background: #EEE;
}

.details {
  font-weight: bold;
  font-size: 14px;
}

</style>

<h1><a href="sqladmin_v1beta4.html">Cloud SQL Admin API</a> . <a href="sqladmin_v1beta4.users.html">users</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#delete">delete(project, instance, host=None, name=None, x__xgafv=None)</a></code></p>
<p class="firstline">Deletes a user from a Cloud SQL instance.</p>
<p class="toc_element">
  <code><a href="#insert">insert(project, instance, body=None, x__xgafv=None)</a></code></p>
<p class="firstline">Creates a new user in a Cloud SQL instance.</p>
<p class="toc_element">
  <code><a href="#list">list(project, instance, x__xgafv=None)</a></code></p>
<p class="firstline">Lists users in the specified Cloud SQL instance.</p>
<p class="toc_element">
  <code><a href="#update">update(project, instance, body=None, name=None, host=None, x__xgafv=None)</a></code></p>
<p class="firstline">Updates an existing user in a Cloud SQL instance.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="delete">delete(project, instance, host=None, name=None, x__xgafv=None)</code>
  <pre>Deletes a user from a Cloud SQL instance.

Args:
  project: string, Project ID of the project that contains the instance. (required)
  instance: string, Database instance ID. This does not include the project ID. (required)
  host: string, Host of the user in the instance.
  name: string, Name of the user in the instance.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An Operation resource.&amp;nbsp;For successful operations that return an
      # Operation resource, only the fields relevant to the operation are populated
      # in the resource.
    &quot;targetLink&quot;: &quot;A String&quot;,
    &quot;operationType&quot;: &quot;A String&quot;, # The type of the operation. Valid values are &lt;code&gt;CREATE&lt;/code&gt;,
        # &lt;code&gt;DELETE&lt;/code&gt;, &lt;code&gt;UPDATE&lt;/code&gt;, &lt;code&gt;RESTART&lt;/code&gt;,
        # &lt;code&gt;IMPORT&lt;/code&gt;, &lt;code&gt;EXPORT&lt;/code&gt;, &lt;code&gt;BACKUP_VOLUME&lt;/code&gt;,
        # &lt;code&gt;RESTORE_VOLUME&lt;/code&gt;, &lt;code&gt;CREATE_USER&lt;/code&gt;,
        # &lt;code&gt;DELETE_USER&lt;/code&gt;, &lt;code&gt;CREATE_DATABASE&lt;/code&gt;,
        # &lt;code&gt;DELETE_DATABASE&lt;/code&gt; .
    &quot;error&quot;: { # Database instance operation errors list wrapper. # If errors occurred during processing of this operation, this field will be
        # populated.
      &quot;errors&quot;: [ # The list of errors encountered while processing this operation.
        { # Database instance operation error.
          &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#operationError&lt;/code&gt;.
          &quot;code&quot;: &quot;A String&quot;, # Identifies the specific error that occurred.
          &quot;message&quot;: &quot;A String&quot;, # Additional information about the error encountered.
        },
      ],
      &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#operationErrors&lt;/code&gt;.
    },
    &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#operation&lt;/code&gt;.
    &quot;importContext&quot;: { # Database instance import context. # The context for import operation, if applicable.
      &quot;database&quot;: &quot;A String&quot;, # The target database for the import. If &lt;code&gt;fileType&lt;/code&gt; is
          # &lt;code&gt;SQL&lt;/code&gt;, this field is required only if the import file does not
          # specify a database, and is overridden by any database specification in the
          # import file. If &lt;code&gt;fileType&lt;/code&gt; is &lt;code&gt;CSV&lt;/code&gt;, one database
          # must be specified.
      &quot;importUser&quot;: &quot;A String&quot;, # The PostgreSQL user for this import operation. PostgreSQL instances only.
      &quot;bakImportOptions&quot;: { # Import parameters specific to SQL Server .BAK files
        &quot;encryptionOptions&quot;: {
          &quot;pvkPassword&quot;: &quot;A String&quot;, # Password that encrypts the private key
          &quot;certPath&quot;: &quot;A String&quot;, # Path to the Certificate (.cer) in Cloud Storage, in the form
              # &lt;code&gt;gs://bucketName/fileName&lt;/code&gt;. The instance must have
              # write permissions to the bucket and read access to the file.
          &quot;pvkPath&quot;: &quot;A String&quot;, # Path to the Certificate Private Key (.pvk)  in Cloud Storage, in the
              # form &lt;code&gt;gs://bucketName/fileName&lt;/code&gt;. The instance must have
              # write permissions to the bucket and read access to the file.
        },
      },
      &quot;uri&quot;: &quot;A String&quot;, # Path to the import file in Cloud Storage, in the form
          # &lt;code&gt;gs:
          # //bucketName/fileName&lt;/code&gt;. Compressed gzip files (.gz) are supported
          # // when &lt;code&gt;fileType&lt;/code&gt; is &lt;code&gt;SQL&lt;/code&gt;. The instance must have
          # // write permissions to the bucket and read access to the file.
      &quot;fileType&quot;: &quot;A String&quot;, # The file type for the specified uri. &lt;br&gt;&lt;code&gt;SQL&lt;/code&gt;: The file
          # contains SQL statements. &lt;br&gt;&lt;code&gt;CSV&lt;/code&gt;: The file contains CSV data.
      &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#importContext&lt;/code&gt;.
      &quot;csvImportOptions&quot;: { # Options for importing data as CSV.
        &quot;table&quot;: &quot;A String&quot;, # The table to which CSV data is imported.
        &quot;columns&quot;: [ # The columns to which CSV data is imported. If not specified, all columns
            # of the database table are loaded with CSV data.
          &quot;A String&quot;,
        ],
      },
    },
    &quot;status&quot;: &quot;A String&quot;, # The status of an operation. Valid values are &lt;code&gt;PENDING&lt;/code&gt;,
        # &lt;code&gt;RUNNING&lt;/code&gt;, &lt;code&gt;DONE&lt;/code&gt;,
        # &lt;code&gt;SQL_OPERATION_STATUS_UNSPECIFIED&lt;/code&gt;.
    &quot;name&quot;: &quot;A String&quot;, # An identifier that uniquely identifies the operation. You can use this
        # identifier to retrieve the Operations resource that has information about
        # the operation.
    &quot;exportContext&quot;: { # Database instance export context. # The context for export operation, if applicable.
      &quot;fileType&quot;: &quot;A String&quot;, # The file type for the specified uri. &lt;br&gt;&lt;code&gt;SQL&lt;/code&gt;: The file
          # contains SQL statements. &lt;br&gt;&lt;code&gt;CSV&lt;/code&gt;: The file contains CSV data.
      &quot;uri&quot;: &quot;A String&quot;, # The path to the file in Google Cloud Storage where the export will be
          # stored. The URI is in the form &lt;code&gt;gs:
          # //bucketName/fileName&lt;/code&gt;. If the file already exists, the requests
          # // succeeds, but the operation fails. If &lt;code&gt;fileType&lt;/code&gt; is
          # // &lt;code&gt;SQL&lt;/code&gt; and the filename ends with .gz, the contents are
          # // compressed.
      &quot;csvExportOptions&quot;: { # Options for exporting data as CSV.
        &quot;selectQuery&quot;: &quot;A String&quot;, # The select query used to extract the data.
      },
      &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#exportContext&lt;/code&gt;.
      &quot;databases&quot;: [ # Databases to be exported. &lt;br /&gt; &lt;b&gt;MySQL instances:&lt;/b&gt; If
          # &lt;code&gt;fileType&lt;/code&gt; is &lt;code&gt;SQL&lt;/code&gt; and no database is specified, all
          # databases are exported, except for the &lt;code&gt;mysql&lt;/code&gt; system database.
          # If &lt;code&gt;fileType&lt;/code&gt; is &lt;code&gt;CSV&lt;/code&gt;, you can specify one database,
          # either by using this property or by using the
          # &lt;code&gt;csvExportOptions.selectQuery&lt;/code&gt; property, which takes precedence
          # over this property. &lt;br /&gt; &lt;b&gt;PostgreSQL instances:&lt;/b&gt; You must specify
          # one database to be exported. If &lt;code&gt;fileType&lt;/code&gt; is &lt;code&gt;CSV&lt;/code&gt;,
          # this database must match the one specified in the
          # &lt;code&gt;csvExportOptions.selectQuery&lt;/code&gt; property.
        &quot;A String&quot;,
      ],
      &quot;sqlExportOptions&quot;: { # Options for exporting data as SQL statements.
        &quot;tables&quot;: [ # Tables to export, or that were exported, from the specified database. If
            # you specify tables, specify one and only one database. For PostgreSQL
            # instances, you can specify only one table.
          &quot;A String&quot;,
        ],
        &quot;schemaOnly&quot;: True or False, # Export only schemas.
        &quot;mysqlExportOptions&quot;: { # Options for exporting from MySQL.
          &quot;masterData&quot;: 42, # Option to include SQL statement required to set up replication.
              # If set to &lt;code&gt;1&lt;/code&gt;, the dump file includes
              #  a CHANGE MASTER TO statement with the binary log coordinates.
              # If set to &lt;code&gt;2&lt;/code&gt;, the CHANGE MASTER TO statement is written as
              #  a SQL comment, and has no effect.
              # All other values are ignored.
        },
      },
    },
    &quot;targetId&quot;: &quot;A String&quot;, # Name of the database instance related to this operation.
    &quot;endTime&quot;: &quot;A String&quot;, # The time this operation finished in UTC timezone in &lt;a
        # href=&quot;https://tools.ietf.org/html/rfc3339&quot;&gt;RFC 3339&lt;/a&gt; format, for example
        # &lt;code&gt;2012-11-15T16:19:00.094Z&lt;/code&gt;.
    &quot;startTime&quot;: &quot;A String&quot;, # The time this operation actually started in UTC timezone in &lt;a
        # href=&quot;https://tools.ietf.org/html/rfc3339&quot;&gt;RFC 3339&lt;/a&gt; format, for example
        # &lt;code&gt;2012-11-15T16:19:00.094Z&lt;/code&gt;.
    &quot;insertTime&quot;: &quot;A String&quot;, # The time this operation was enqueued in UTC timezone in &lt;a
        # href=&quot;https://tools.ietf.org/html/rfc3339&quot;&gt;RFC 3339&lt;/a&gt; format, for example
        # &lt;code&gt;2012-11-15T16:19:00.094Z&lt;/code&gt;.
    &quot;user&quot;: &quot;A String&quot;, # The email address of the user who initiated this operation.
    &quot;targetProject&quot;: &quot;A String&quot;, # The project ID of the target instance related to this operation.
    &quot;selfLink&quot;: &quot;A String&quot;, # The URI of this resource.
  }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(project, instance, body=None, x__xgafv=None)</code>
  <pre>Creates a new user in a Cloud SQL instance.

Args:
  project: string, Project ID of the project that contains the instance. (required)
  instance: string, Database instance ID. This does not include the project ID. (required)
  body: object, The request body.
    The object takes the form of:

{ # A Cloud SQL user resource.
    &quot;project&quot;: &quot;A String&quot;, # The project ID of the project containing the Cloud SQL database. The Google
        # apps domain is prefixed if applicable. Can be omitted for
        # &lt;code&gt;update&lt;/code&gt; since it is already specified on the URL.
    &quot;host&quot;: &quot;A String&quot;, # The host name from which the user can connect. For &lt;code&gt;insert&lt;/code&gt;
        # operations, host defaults to an empty string. For &lt;code&gt;update&lt;/code&gt;
        # operations, host is specified as part of the request URL. The host name
        # cannot be updated after insertion.
    &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#user&lt;/code&gt;.
    &quot;password&quot;: &quot;A String&quot;, # The password for the user.
    &quot;etag&quot;: &quot;A String&quot;, # This field is deprecated and will be removed from a future version of the
        # API.
    &quot;sqlserverUserDetails&quot;: { # Represents a Sql Server user on the Cloud SQL instance.
      &quot;disabled&quot;: True or False, # If the user has been disabled
      &quot;serverRoles&quot;: [ # The server roles for this user
        &quot;A String&quot;,
      ],
    },
    &quot;name&quot;: &quot;A String&quot;, # The name of the user in the Cloud SQL instance. Can be omitted for
        # &lt;code&gt;update&lt;/code&gt; since it is already specified in the URL.
    &quot;instance&quot;: &quot;A String&quot;, # The name of the Cloud SQL instance. This does not include the project ID.
        # Can be omitted for &lt;code&gt;update&lt;/code&gt; since it is already specified on the
        # URL.
  }

  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An Operation resource.&amp;nbsp;For successful operations that return an
      # Operation resource, only the fields relevant to the operation are populated
      # in the resource.
    &quot;targetLink&quot;: &quot;A String&quot;,
    &quot;operationType&quot;: &quot;A String&quot;, # The type of the operation. Valid values are &lt;code&gt;CREATE&lt;/code&gt;,
        # &lt;code&gt;DELETE&lt;/code&gt;, &lt;code&gt;UPDATE&lt;/code&gt;, &lt;code&gt;RESTART&lt;/code&gt;,
        # &lt;code&gt;IMPORT&lt;/code&gt;, &lt;code&gt;EXPORT&lt;/code&gt;, &lt;code&gt;BACKUP_VOLUME&lt;/code&gt;,
        # &lt;code&gt;RESTORE_VOLUME&lt;/code&gt;, &lt;code&gt;CREATE_USER&lt;/code&gt;,
        # &lt;code&gt;DELETE_USER&lt;/code&gt;, &lt;code&gt;CREATE_DATABASE&lt;/code&gt;,
        # &lt;code&gt;DELETE_DATABASE&lt;/code&gt; .
    &quot;error&quot;: { # Database instance operation errors list wrapper. # If errors occurred during processing of this operation, this field will be
        # populated.
      &quot;errors&quot;: [ # The list of errors encountered while processing this operation.
        { # Database instance operation error.
          &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#operationError&lt;/code&gt;.
          &quot;code&quot;: &quot;A String&quot;, # Identifies the specific error that occurred.
          &quot;message&quot;: &quot;A String&quot;, # Additional information about the error encountered.
        },
      ],
      &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#operationErrors&lt;/code&gt;.
    },
    &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#operation&lt;/code&gt;.
    &quot;importContext&quot;: { # Database instance import context. # The context for import operation, if applicable.
      &quot;database&quot;: &quot;A String&quot;, # The target database for the import. If &lt;code&gt;fileType&lt;/code&gt; is
          # &lt;code&gt;SQL&lt;/code&gt;, this field is required only if the import file does not
          # specify a database, and is overridden by any database specification in the
          # import file. If &lt;code&gt;fileType&lt;/code&gt; is &lt;code&gt;CSV&lt;/code&gt;, one database
          # must be specified.
      &quot;importUser&quot;: &quot;A String&quot;, # The PostgreSQL user for this import operation. PostgreSQL instances only.
      &quot;bakImportOptions&quot;: { # Import parameters specific to SQL Server .BAK files
        &quot;encryptionOptions&quot;: {
          &quot;pvkPassword&quot;: &quot;A String&quot;, # Password that encrypts the private key
          &quot;certPath&quot;: &quot;A String&quot;, # Path to the Certificate (.cer) in Cloud Storage, in the form
              # &lt;code&gt;gs://bucketName/fileName&lt;/code&gt;. The instance must have
              # write permissions to the bucket and read access to the file.
          &quot;pvkPath&quot;: &quot;A String&quot;, # Path to the Certificate Private Key (.pvk)  in Cloud Storage, in the
              # form &lt;code&gt;gs://bucketName/fileName&lt;/code&gt;. The instance must have
              # write permissions to the bucket and read access to the file.
        },
      },
      &quot;uri&quot;: &quot;A String&quot;, # Path to the import file in Cloud Storage, in the form
          # &lt;code&gt;gs:
          # //bucketName/fileName&lt;/code&gt;. Compressed gzip files (.gz) are supported
          # // when &lt;code&gt;fileType&lt;/code&gt; is &lt;code&gt;SQL&lt;/code&gt;. The instance must have
          # // write permissions to the bucket and read access to the file.
      &quot;fileType&quot;: &quot;A String&quot;, # The file type for the specified uri. &lt;br&gt;&lt;code&gt;SQL&lt;/code&gt;: The file
          # contains SQL statements. &lt;br&gt;&lt;code&gt;CSV&lt;/code&gt;: The file contains CSV data.
      &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#importContext&lt;/code&gt;.
      &quot;csvImportOptions&quot;: { # Options for importing data as CSV.
        &quot;table&quot;: &quot;A String&quot;, # The table to which CSV data is imported.
        &quot;columns&quot;: [ # The columns to which CSV data is imported. If not specified, all columns
            # of the database table are loaded with CSV data.
          &quot;A String&quot;,
        ],
      },
    },
    &quot;status&quot;: &quot;A String&quot;, # The status of an operation. Valid values are &lt;code&gt;PENDING&lt;/code&gt;,
        # &lt;code&gt;RUNNING&lt;/code&gt;, &lt;code&gt;DONE&lt;/code&gt;,
        # &lt;code&gt;SQL_OPERATION_STATUS_UNSPECIFIED&lt;/code&gt;.
    &quot;name&quot;: &quot;A String&quot;, # An identifier that uniquely identifies the operation. You can use this
        # identifier to retrieve the Operations resource that has information about
        # the operation.
    &quot;exportContext&quot;: { # Database instance export context. # The context for export operation, if applicable.
      &quot;fileType&quot;: &quot;A String&quot;, # The file type for the specified uri. &lt;br&gt;&lt;code&gt;SQL&lt;/code&gt;: The file
          # contains SQL statements. &lt;br&gt;&lt;code&gt;CSV&lt;/code&gt;: The file contains CSV data.
      &quot;uri&quot;: &quot;A String&quot;, # The path to the file in Google Cloud Storage where the export will be
          # stored. The URI is in the form &lt;code&gt;gs:
          # //bucketName/fileName&lt;/code&gt;. If the file already exists, the requests
          # // succeeds, but the operation fails. If &lt;code&gt;fileType&lt;/code&gt; is
          # // &lt;code&gt;SQL&lt;/code&gt; and the filename ends with .gz, the contents are
          # // compressed.
      &quot;csvExportOptions&quot;: { # Options for exporting data as CSV.
        &quot;selectQuery&quot;: &quot;A String&quot;, # The select query used to extract the data.
      },
      &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#exportContext&lt;/code&gt;.
      &quot;databases&quot;: [ # Databases to be exported. &lt;br /&gt; &lt;b&gt;MySQL instances:&lt;/b&gt; If
          # &lt;code&gt;fileType&lt;/code&gt; is &lt;code&gt;SQL&lt;/code&gt; and no database is specified, all
          # databases are exported, except for the &lt;code&gt;mysql&lt;/code&gt; system database.
          # If &lt;code&gt;fileType&lt;/code&gt; is &lt;code&gt;CSV&lt;/code&gt;, you can specify one database,
          # either by using this property or by using the
          # &lt;code&gt;csvExportOptions.selectQuery&lt;/code&gt; property, which takes precedence
          # over this property. &lt;br /&gt; &lt;b&gt;PostgreSQL instances:&lt;/b&gt; You must specify
          # one database to be exported. If &lt;code&gt;fileType&lt;/code&gt; is &lt;code&gt;CSV&lt;/code&gt;,
          # this database must match the one specified in the
          # &lt;code&gt;csvExportOptions.selectQuery&lt;/code&gt; property.
        &quot;A String&quot;,
      ],
      &quot;sqlExportOptions&quot;: { # Options for exporting data as SQL statements.
        &quot;tables&quot;: [ # Tables to export, or that were exported, from the specified database. If
            # you specify tables, specify one and only one database. For PostgreSQL
            # instances, you can specify only one table.
          &quot;A String&quot;,
        ],
        &quot;schemaOnly&quot;: True or False, # Export only schemas.
        &quot;mysqlExportOptions&quot;: { # Options for exporting from MySQL.
          &quot;masterData&quot;: 42, # Option to include SQL statement required to set up replication.
              # If set to &lt;code&gt;1&lt;/code&gt;, the dump file includes
              #  a CHANGE MASTER TO statement with the binary log coordinates.
              # If set to &lt;code&gt;2&lt;/code&gt;, the CHANGE MASTER TO statement is written as
              #  a SQL comment, and has no effect.
              # All other values are ignored.
        },
      },
    },
    &quot;targetId&quot;: &quot;A String&quot;, # Name of the database instance related to this operation.
    &quot;endTime&quot;: &quot;A String&quot;, # The time this operation finished in UTC timezone in &lt;a
        # href=&quot;https://tools.ietf.org/html/rfc3339&quot;&gt;RFC 3339&lt;/a&gt; format, for example
        # &lt;code&gt;2012-11-15T16:19:00.094Z&lt;/code&gt;.
    &quot;startTime&quot;: &quot;A String&quot;, # The time this operation actually started in UTC timezone in &lt;a
        # href=&quot;https://tools.ietf.org/html/rfc3339&quot;&gt;RFC 3339&lt;/a&gt; format, for example
        # &lt;code&gt;2012-11-15T16:19:00.094Z&lt;/code&gt;.
    &quot;insertTime&quot;: &quot;A String&quot;, # The time this operation was enqueued in UTC timezone in &lt;a
        # href=&quot;https://tools.ietf.org/html/rfc3339&quot;&gt;RFC 3339&lt;/a&gt; format, for example
        # &lt;code&gt;2012-11-15T16:19:00.094Z&lt;/code&gt;.
    &quot;user&quot;: &quot;A String&quot;, # The email address of the user who initiated this operation.
    &quot;targetProject&quot;: &quot;A String&quot;, # The project ID of the target instance related to this operation.
    &quot;selfLink&quot;: &quot;A String&quot;, # The URI of this resource.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(project, instance, x__xgafv=None)</code>
  <pre>Lists users in the specified Cloud SQL instance.

Args:
  project: string, Project ID of the project that contains the instance. (required)
  instance: string, Database instance ID. This does not include the project ID. (required)
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # User list response.
    &quot;items&quot;: [ # List of user resources in the instance.
      { # A Cloud SQL user resource.
          &quot;project&quot;: &quot;A String&quot;, # The project ID of the project containing the Cloud SQL database. The Google
              # apps domain is prefixed if applicable. Can be omitted for
              # &lt;code&gt;update&lt;/code&gt; since it is already specified on the URL.
          &quot;host&quot;: &quot;A String&quot;, # The host name from which the user can connect. For &lt;code&gt;insert&lt;/code&gt;
              # operations, host defaults to an empty string. For &lt;code&gt;update&lt;/code&gt;
              # operations, host is specified as part of the request URL. The host name
              # cannot be updated after insertion.
          &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#user&lt;/code&gt;.
          &quot;password&quot;: &quot;A String&quot;, # The password for the user.
          &quot;etag&quot;: &quot;A String&quot;, # This field is deprecated and will be removed from a future version of the
              # API.
          &quot;sqlserverUserDetails&quot;: { # Represents a Sql Server user on the Cloud SQL instance.
            &quot;disabled&quot;: True or False, # If the user has been disabled
            &quot;serverRoles&quot;: [ # The server roles for this user
              &quot;A String&quot;,
            ],
          },
          &quot;name&quot;: &quot;A String&quot;, # The name of the user in the Cloud SQL instance. Can be omitted for
              # &lt;code&gt;update&lt;/code&gt; since it is already specified in the URL.
          &quot;instance&quot;: &quot;A String&quot;, # The name of the Cloud SQL instance. This does not include the project ID.
              # Can be omitted for &lt;code&gt;update&lt;/code&gt; since it is already specified on the
              # URL.
        },
    ],
    &quot;nextPageToken&quot;: &quot;A String&quot;, # An identifier that uniquely identifies the operation. You can use this
        # identifier to retrieve the Operations resource that has information about
        # the operation.
    &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#usersList&lt;/code&gt;.
  }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(project, instance, body=None, name=None, host=None, x__xgafv=None)</code>
  <pre>Updates an existing user in a Cloud SQL instance.

Args:
  project: string, Project ID of the project that contains the instance. (required)
  instance: string, Database instance ID. This does not include the project ID. (required)
  body: object, The request body.
    The object takes the form of:

{ # A Cloud SQL user resource.
    &quot;project&quot;: &quot;A String&quot;, # The project ID of the project containing the Cloud SQL database. The Google
        # apps domain is prefixed if applicable. Can be omitted for
        # &lt;code&gt;update&lt;/code&gt; since it is already specified on the URL.
    &quot;host&quot;: &quot;A String&quot;, # The host name from which the user can connect. For &lt;code&gt;insert&lt;/code&gt;
        # operations, host defaults to an empty string. For &lt;code&gt;update&lt;/code&gt;
        # operations, host is specified as part of the request URL. The host name
        # cannot be updated after insertion.
    &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#user&lt;/code&gt;.
    &quot;password&quot;: &quot;A String&quot;, # The password for the user.
    &quot;etag&quot;: &quot;A String&quot;, # This field is deprecated and will be removed from a future version of the
        # API.
    &quot;sqlserverUserDetails&quot;: { # Represents a Sql Server user on the Cloud SQL instance.
      &quot;disabled&quot;: True or False, # If the user has been disabled
      &quot;serverRoles&quot;: [ # The server roles for this user
        &quot;A String&quot;,
      ],
    },
    &quot;name&quot;: &quot;A String&quot;, # The name of the user in the Cloud SQL instance. Can be omitted for
        # &lt;code&gt;update&lt;/code&gt; since it is already specified in the URL.
    &quot;instance&quot;: &quot;A String&quot;, # The name of the Cloud SQL instance. This does not include the project ID.
        # Can be omitted for &lt;code&gt;update&lt;/code&gt; since it is already specified on the
        # URL.
  }

  name: string, Name of the user in the instance.
  host: string, Optional. Host of the user in the instance.
  x__xgafv: string, V1 error format.
    Allowed values
      1 - v1 error format
      2 - v2 error format

Returns:
  An object of the form:

    { # An Operation resource.&amp;nbsp;For successful operations that return an
      # Operation resource, only the fields relevant to the operation are populated
      # in the resource.
    &quot;targetLink&quot;: &quot;A String&quot;,
    &quot;operationType&quot;: &quot;A String&quot;, # The type of the operation. Valid values are &lt;code&gt;CREATE&lt;/code&gt;,
        # &lt;code&gt;DELETE&lt;/code&gt;, &lt;code&gt;UPDATE&lt;/code&gt;, &lt;code&gt;RESTART&lt;/code&gt;,
        # &lt;code&gt;IMPORT&lt;/code&gt;, &lt;code&gt;EXPORT&lt;/code&gt;, &lt;code&gt;BACKUP_VOLUME&lt;/code&gt;,
        # &lt;code&gt;RESTORE_VOLUME&lt;/code&gt;, &lt;code&gt;CREATE_USER&lt;/code&gt;,
        # &lt;code&gt;DELETE_USER&lt;/code&gt;, &lt;code&gt;CREATE_DATABASE&lt;/code&gt;,
        # &lt;code&gt;DELETE_DATABASE&lt;/code&gt; .
    &quot;error&quot;: { # Database instance operation errors list wrapper. # If errors occurred during processing of this operation, this field will be
        # populated.
      &quot;errors&quot;: [ # The list of errors encountered while processing this operation.
        { # Database instance operation error.
          &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#operationError&lt;/code&gt;.
          &quot;code&quot;: &quot;A String&quot;, # Identifies the specific error that occurred.
          &quot;message&quot;: &quot;A String&quot;, # Additional information about the error encountered.
        },
      ],
      &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#operationErrors&lt;/code&gt;.
    },
    &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#operation&lt;/code&gt;.
    &quot;importContext&quot;: { # Database instance import context. # The context for import operation, if applicable.
      &quot;database&quot;: &quot;A String&quot;, # The target database for the import. If &lt;code&gt;fileType&lt;/code&gt; is
          # &lt;code&gt;SQL&lt;/code&gt;, this field is required only if the import file does not
          # specify a database, and is overridden by any database specification in the
          # import file. If &lt;code&gt;fileType&lt;/code&gt; is &lt;code&gt;CSV&lt;/code&gt;, one database
          # must be specified.
      &quot;importUser&quot;: &quot;A String&quot;, # The PostgreSQL user for this import operation. PostgreSQL instances only.
      &quot;bakImportOptions&quot;: { # Import parameters specific to SQL Server .BAK files
        &quot;encryptionOptions&quot;: {
          &quot;pvkPassword&quot;: &quot;A String&quot;, # Password that encrypts the private key
          &quot;certPath&quot;: &quot;A String&quot;, # Path to the Certificate (.cer) in Cloud Storage, in the form
              # &lt;code&gt;gs://bucketName/fileName&lt;/code&gt;. The instance must have
              # write permissions to the bucket and read access to the file.
          &quot;pvkPath&quot;: &quot;A String&quot;, # Path to the Certificate Private Key (.pvk)  in Cloud Storage, in the
              # form &lt;code&gt;gs://bucketName/fileName&lt;/code&gt;. The instance must have
              # write permissions to the bucket and read access to the file.
        },
      },
      &quot;uri&quot;: &quot;A String&quot;, # Path to the import file in Cloud Storage, in the form
          # &lt;code&gt;gs:
          # //bucketName/fileName&lt;/code&gt;. Compressed gzip files (.gz) are supported
          # // when &lt;code&gt;fileType&lt;/code&gt; is &lt;code&gt;SQL&lt;/code&gt;. The instance must have
          # // write permissions to the bucket and read access to the file.
      &quot;fileType&quot;: &quot;A String&quot;, # The file type for the specified uri. &lt;br&gt;&lt;code&gt;SQL&lt;/code&gt;: The file
          # contains SQL statements. &lt;br&gt;&lt;code&gt;CSV&lt;/code&gt;: The file contains CSV data.
      &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#importContext&lt;/code&gt;.
      &quot;csvImportOptions&quot;: { # Options for importing data as CSV.
        &quot;table&quot;: &quot;A String&quot;, # The table to which CSV data is imported.
        &quot;columns&quot;: [ # The columns to which CSV data is imported. If not specified, all columns
            # of the database table are loaded with CSV data.
          &quot;A String&quot;,
        ],
      },
    },
    &quot;status&quot;: &quot;A String&quot;, # The status of an operation. Valid values are &lt;code&gt;PENDING&lt;/code&gt;,
        # &lt;code&gt;RUNNING&lt;/code&gt;, &lt;code&gt;DONE&lt;/code&gt;,
        # &lt;code&gt;SQL_OPERATION_STATUS_UNSPECIFIED&lt;/code&gt;.
    &quot;name&quot;: &quot;A String&quot;, # An identifier that uniquely identifies the operation. You can use this
        # identifier to retrieve the Operations resource that has information about
        # the operation.
    &quot;exportContext&quot;: { # Database instance export context. # The context for export operation, if applicable.
      &quot;fileType&quot;: &quot;A String&quot;, # The file type for the specified uri. &lt;br&gt;&lt;code&gt;SQL&lt;/code&gt;: The file
          # contains SQL statements. &lt;br&gt;&lt;code&gt;CSV&lt;/code&gt;: The file contains CSV data.
      &quot;uri&quot;: &quot;A String&quot;, # The path to the file in Google Cloud Storage where the export will be
          # stored. The URI is in the form &lt;code&gt;gs:
          # //bucketName/fileName&lt;/code&gt;. If the file already exists, the requests
          # // succeeds, but the operation fails. If &lt;code&gt;fileType&lt;/code&gt; is
          # // &lt;code&gt;SQL&lt;/code&gt; and the filename ends with .gz, the contents are
          # // compressed.
      &quot;csvExportOptions&quot;: { # Options for exporting data as CSV.
        &quot;selectQuery&quot;: &quot;A String&quot;, # The select query used to extract the data.
      },
      &quot;kind&quot;: &quot;A String&quot;, # This is always &lt;code&gt;sql#exportContext&lt;/code&gt;.
      &quot;databases&quot;: [ # Databases to be exported. &lt;br /&gt; &lt;b&gt;MySQL instances:&lt;/b&gt; If
          # &lt;code&gt;fileType&lt;/code&gt; is &lt;code&gt;SQL&lt;/code&gt; and no database is specified, all
          # databases are exported, except for the &lt;code&gt;mysql&lt;/code&gt; system database.
          # If &lt;code&gt;fileType&lt;/code&gt; is &lt;code&gt;CSV&lt;/code&gt;, you can specify one database,
          # either by using this property or by using the
          # &lt;code&gt;csvExportOptions.selectQuery&lt;/code&gt; property, which takes precedence
          # over this property. &lt;br /&gt; &lt;b&gt;PostgreSQL instances:&lt;/b&gt; You must specify
          # one database to be exported. If &lt;code&gt;fileType&lt;/code&gt; is &lt;code&gt;CSV&lt;/code&gt;,
          # this database must match the one specified in the
          # &lt;code&gt;csvExportOptions.selectQuery&lt;/code&gt; property.
        &quot;A String&quot;,
      ],
      &quot;sqlExportOptions&quot;: { # Options for exporting data as SQL statements.
        &quot;tables&quot;: [ # Tables to export, or that were exported, from the specified database. If
            # you specify tables, specify one and only one database. For PostgreSQL
            # instances, you can specify only one table.
          &quot;A String&quot;,
        ],
        &quot;schemaOnly&quot;: True or False, # Export only schemas.
        &quot;mysqlExportOptions&quot;: { # Options for exporting from MySQL.
          &quot;masterData&quot;: 42, # Option to include SQL statement required to set up replication.
              # If set to &lt;code&gt;1&lt;/code&gt;, the dump file includes
              #  a CHANGE MASTER TO statement with the binary log coordinates.
              # If set to &lt;code&gt;2&lt;/code&gt;, the CHANGE MASTER TO statement is written as
              #  a SQL comment, and has no effect.
              # All other values are ignored.
        },
      },
    },
    &quot;targetId&quot;: &quot;A String&quot;, # Name of the database instance related to this operation.
    &quot;endTime&quot;: &quot;A String&quot;, # The time this operation finished in UTC timezone in &lt;a
        # href=&quot;https://tools.ietf.org/html/rfc3339&quot;&gt;RFC 3339&lt;/a&gt; format, for example
        # &lt;code&gt;2012-11-15T16:19:00.094Z&lt;/code&gt;.
    &quot;startTime&quot;: &quot;A String&quot;, # The time this operation actually started in UTC timezone in &lt;a
        # href=&quot;https://tools.ietf.org/html/rfc3339&quot;&gt;RFC 3339&lt;/a&gt; format, for example
        # &lt;code&gt;2012-11-15T16:19:00.094Z&lt;/code&gt;.
    &quot;insertTime&quot;: &quot;A String&quot;, # The time this operation was enqueued in UTC timezone in &lt;a
        # href=&quot;https://tools.ietf.org/html/rfc3339&quot;&gt;RFC 3339&lt;/a&gt; format, for example
        # &lt;code&gt;2012-11-15T16:19:00.094Z&lt;/code&gt;.
    &quot;user&quot;: &quot;A String&quot;, # The email address of the user who initiated this operation.
    &quot;targetProject&quot;: &quot;A String&quot;, # The project ID of the target instance related to this operation.
    &quot;selfLink&quot;: &quot;A String&quot;, # The URI of this resource.
  }</pre>
</div>

</body></html>