<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="fusiontables_v1.html">Fusion Tables API</a> . <a href="fusiontables_v1.table.html">table</a></h1>
<h2>Instance Methods</h2>
<p class="toc_element">
  <code><a href="#copy">copy(tableId, copyPresentation=None)</a></code></p>
<p class="firstline">Copies a table.</p>
<p class="toc_element">
  <code><a href="#delete">delete(tableId)</a></code></p>
<p class="firstline">Deletes a table.</p>
<p class="toc_element">
  <code><a href="#get">get(tableId)</a></code></p>
<p class="firstline">Retrieves a specific table by its id.</p>
<p class="toc_element">
  <code><a href="#importRows">importRows(tableId, media_body=None, startLine=None, isStrict=None, encoding=None, media_mime_type=None, delimiter=None, endLine=None)</a></code></p>
<p class="firstline">Import more rows into a table.</p>
<p class="toc_element">
  <code><a href="#importTable">importTable(name, media_body=None, encoding=None, delimiter=None, media_mime_type=None)</a></code></p>
<p class="firstline">Import a new table.</p>
<p class="toc_element">
  <code><a href="#insert">insert(body)</a></code></p>
<p class="firstline">Creates a new table.</p>
<p class="toc_element">
  <code><a href="#list">list(pageToken=None, maxResults=None)</a></code></p>
<p class="firstline">Retrieves a list of tables a user owns.</p>
<p class="toc_element">
  <code><a href="#list_next">list_next(previous_request, previous_response)</a></code></p>
<p class="firstline">Retrieves the next page of results.</p>
<p class="toc_element">
  <code><a href="#patch">patch(tableId, body, replaceViewDefinition=None)</a></code></p>
<p class="firstline">Updates an existing table. Unless explicitly requested, only the name, description, and attribution will be updated. This method supports patch semantics.</p>
<p class="toc_element">
  <code><a href="#update">update(tableId, body, replaceViewDefinition=None)</a></code></p>
<p class="firstline">Updates an existing table. Unless explicitly requested, only the name, description, and attribution will be updated.</p>
<h3>Method Details</h3>
<div class="method">
    <code class="details" id="copy">copy(tableId, copyPresentation=None)</code>
  <pre>Copies a table.

Args:
  tableId: string, ID of the table that is being copied. (required)
  copyPresentation: boolean, Whether to also copy tabs, styles, and templates. Default is false.

Returns:
  An object of the form:

    { # Represents a table. Specifies the name, whether it is exportable, description, attribution, and attribution link.
      "kind": "fusiontables#table", # Type name: a template for an individual table.
      "attribution": "A String", # Optional attribution assigned to the table.
      "description": "A String", # Optional description assigned to the table.
      "isExportable": True or False, # Variable for whether table is exportable.
      "baseTableIds": [ # Optional base table identifier if this table is a view or merged table.
        "A String",
      ],
      "attributionLink": "A String", # Optional link for attribution.
      "sql": "A String", # Optional sql that encodes the table definition for derived tables.
      "tableId": "A String", # Encrypted unique alphanumeric identifier for the table.
      "columns": [ # Columns in the table.
        { # Specifies the id, name and type of a column in a table.
            "kind": "fusiontables#column", # Type name: a template for an individual column.
            "description": "A String", # Optional column description.
            "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
              "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
              "columnId": 42, # The id of the column in the base table from which this column is derived.
            },
            "columnId": 42, # Identifier for the column.
            "graph_predicate": "A String", # Optional column predicate. Used to map table to graph data model (subject,predicate,object) See http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#data-model
            "type": "A String", # Required type of the column.
            "name": "A String", # Required name of the column.
          },
      ],
      "name": "A String", # Name assigned to a table.
    }</pre>
</div>

<div class="method">
    <code class="details" id="delete">delete(tableId)</code>
  <pre>Deletes a table.

Args:
  tableId: string, ID of the table that is being deleted. (required)
</pre>
</div>

<div class="method">
    <code class="details" id="get">get(tableId)</code>
  <pre>Retrieves a specific table by its id.

Args:
  tableId: string, Identifier(ID) for the table being requested. (required)

Returns:
  An object of the form:

    { # Represents a table. Specifies the name, whether it is exportable, description, attribution, and attribution link.
      "kind": "fusiontables#table", # Type name: a template for an individual table.
      "attribution": "A String", # Optional attribution assigned to the table.
      "description": "A String", # Optional description assigned to the table.
      "isExportable": True or False, # Variable for whether table is exportable.
      "baseTableIds": [ # Optional base table identifier if this table is a view or merged table.
        "A String",
      ],
      "attributionLink": "A String", # Optional link for attribution.
      "sql": "A String", # Optional sql that encodes the table definition for derived tables.
      "tableId": "A String", # Encrypted unique alphanumeric identifier for the table.
      "columns": [ # Columns in the table.
        { # Specifies the id, name and type of a column in a table.
            "kind": "fusiontables#column", # Type name: a template for an individual column.
            "description": "A String", # Optional column description.
            "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
              "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
              "columnId": 42, # The id of the column in the base table from which this column is derived.
            },
            "columnId": 42, # Identifier for the column.
            "graph_predicate": "A String", # Optional column predicate. Used to map table to graph data model (subject,predicate,object) See http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#data-model
            "type": "A String", # Required type of the column.
            "name": "A String", # Required name of the column.
          },
      ],
      "name": "A String", # Name assigned to a table.
    }</pre>
</div>

<div class="method">
    <code class="details" id="importRows">importRows(tableId, media_body=None, startLine=None, isStrict=None, encoding=None, media_mime_type=None, delimiter=None, endLine=None)</code>
  <pre>Import more rows into a table.

Args:
  tableId: string, The table into which new rows are being imported. (required)
  media_body: string, The filename of the media request body, or an instance of a MediaUpload object.
  startLine: integer, The index of the first line from which to start importing, inclusive. Default is 0.
  isStrict: boolean, Whether the CSV must have the same number of values for each row. If false, rows with fewer values will be padded with empty values. Default is true.
  encoding: string, The encoding of the content. Default is UTF-8. Use 'auto-detect' if you are unsure of the encoding.
  media_mime_type: string, The MIME type of the media request body, or an instance of a MediaUpload object.
  delimiter: string, The delimiter used to separate cell values. This can only consist of a single character. Default is ','.
  endLine: integer, The index of the last line from which to start importing, exclusive. Thus, the number of imported lines is endLine - startLine. If this parameter is not provided, the file will be imported until the last line of the file. If endLine is negative, then the imported content will exclude the last endLine lines. That is, if endline is negative, no line will be imported whose index is greater than N + endLine where N is the number of lines in the file, and the number of imported lines will be N + endLine - startLine.

Returns:
  An object of the form:

    { # Represents an import request.
    "numRowsReceived": "A String", # The number of rows received from the import request.
    "kind": "fusiontables#import", # Type name: a template for an import request.
  }</pre>
</div>

<div class="method">
    <code class="details" id="importTable">importTable(name, media_body=None, encoding=None, delimiter=None, media_mime_type=None)</code>
  <pre>Import a new table.

Args:
  name: string, The name to be assigned to the new table. (required)
  media_body: string, The filename of the media request body, or an instance of a MediaUpload object.
  encoding: string, The encoding of the content. Default is UTF-8. Use 'auto-detect' if you are unsure of the encoding.
  delimiter: string, The delimiter used to separate cell values. This can only consist of a single character. Default is ','.
  media_mime_type: string, The MIME type of the media request body, or an instance of a MediaUpload object.

Returns:
  An object of the form:

    { # Represents a table. Specifies the name, whether it is exportable, description, attribution, and attribution link.
      "kind": "fusiontables#table", # Type name: a template for an individual table.
      "attribution": "A String", # Optional attribution assigned to the table.
      "description": "A String", # Optional description assigned to the table.
      "isExportable": True or False, # Variable for whether table is exportable.
      "baseTableIds": [ # Optional base table identifier if this table is a view or merged table.
        "A String",
      ],
      "attributionLink": "A String", # Optional link for attribution.
      "sql": "A String", # Optional sql that encodes the table definition for derived tables.
      "tableId": "A String", # Encrypted unique alphanumeric identifier for the table.
      "columns": [ # Columns in the table.
        { # Specifies the id, name and type of a column in a table.
            "kind": "fusiontables#column", # Type name: a template for an individual column.
            "description": "A String", # Optional column description.
            "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
              "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
              "columnId": 42, # The id of the column in the base table from which this column is derived.
            },
            "columnId": 42, # Identifier for the column.
            "graph_predicate": "A String", # Optional column predicate. Used to map table to graph data model (subject,predicate,object) See http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#data-model
            "type": "A String", # Required type of the column.
            "name": "A String", # Required name of the column.
          },
      ],
      "name": "A String", # Name assigned to a table.
    }</pre>
</div>

<div class="method">
    <code class="details" id="insert">insert(body)</code>
  <pre>Creates a new table.

Args:
  body: object, The request body. (required)
    The object takes the form of:

{ # Represents a table. Specifies the name, whether it is exportable, description, attribution, and attribution link.
    "kind": "fusiontables#table", # Type name: a template for an individual table.
    "attribution": "A String", # Optional attribution assigned to the table.
    "description": "A String", # Optional description assigned to the table.
    "isExportable": True or False, # Variable for whether table is exportable.
    "baseTableIds": [ # Optional base table identifier if this table is a view or merged table.
      "A String",
    ],
    "attributionLink": "A String", # Optional link for attribution.
    "sql": "A String", # Optional sql that encodes the table definition for derived tables.
    "tableId": "A String", # Encrypted unique alphanumeric identifier for the table.
    "columns": [ # Columns in the table.
      { # Specifies the id, name and type of a column in a table.
          "kind": "fusiontables#column", # Type name: a template for an individual column.
          "description": "A String", # Optional column description.
          "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
            "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
            "columnId": 42, # The id of the column in the base table from which this column is derived.
          },
          "columnId": 42, # Identifier for the column.
          "graph_predicate": "A String", # Optional column predicate. Used to map table to graph data model (subject,predicate,object) See http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#data-model
          "type": "A String", # Required type of the column.
          "name": "A String", # Required name of the column.
        },
    ],
    "name": "A String", # Name assigned to a table.
  }


Returns:
  An object of the form:

    { # Represents a table. Specifies the name, whether it is exportable, description, attribution, and attribution link.
      "kind": "fusiontables#table", # Type name: a template for an individual table.
      "attribution": "A String", # Optional attribution assigned to the table.
      "description": "A String", # Optional description assigned to the table.
      "isExportable": True or False, # Variable for whether table is exportable.
      "baseTableIds": [ # Optional base table identifier if this table is a view or merged table.
        "A String",
      ],
      "attributionLink": "A String", # Optional link for attribution.
      "sql": "A String", # Optional sql that encodes the table definition for derived tables.
      "tableId": "A String", # Encrypted unique alphanumeric identifier for the table.
      "columns": [ # Columns in the table.
        { # Specifies the id, name and type of a column in a table.
            "kind": "fusiontables#column", # Type name: a template for an individual column.
            "description": "A String", # Optional column description.
            "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
              "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
              "columnId": 42, # The id of the column in the base table from which this column is derived.
            },
            "columnId": 42, # Identifier for the column.
            "graph_predicate": "A String", # Optional column predicate. Used to map table to graph data model (subject,predicate,object) See http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#data-model
            "type": "A String", # Required type of the column.
            "name": "A String", # Required name of the column.
          },
      ],
      "name": "A String", # Name assigned to a table.
    }</pre>
</div>

<div class="method">
    <code class="details" id="list">list(pageToken=None, maxResults=None)</code>
  <pre>Retrieves a list of tables a user owns.

Args:
  pageToken: string, Continuation token specifying which result page to return. Optional.
  maxResults: integer, Maximum number of styles to return. Optional. Default is 5.

Returns:
  An object of the form:

    { # Represents a list of tables.
    "nextPageToken": "A String", # Token used to access the next page of this result. No token is displayed if there are no more pages left.
    "items": [ # List of all requested tables.
      { # Represents a table. Specifies the name, whether it is exportable, description, attribution, and attribution link.
          "kind": "fusiontables#table", # Type name: a template for an individual table.
          "attribution": "A String", # Optional attribution assigned to the table.
          "description": "A String", # Optional description assigned to the table.
          "isExportable": True or False, # Variable for whether table is exportable.
          "baseTableIds": [ # Optional base table identifier if this table is a view or merged table.
            "A String",
          ],
          "attributionLink": "A String", # Optional link for attribution.
          "sql": "A String", # Optional sql that encodes the table definition for derived tables.
          "tableId": "A String", # Encrypted unique alphanumeric identifier for the table.
          "columns": [ # Columns in the table.
            { # Specifies the id, name and type of a column in a table.
                "kind": "fusiontables#column", # Type name: a template for an individual column.
                "description": "A String", # Optional column description.
                "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
                  "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
                  "columnId": 42, # The id of the column in the base table from which this column is derived.
                },
                "columnId": 42, # Identifier for the column.
                "graph_predicate": "A String", # Optional column predicate. Used to map table to graph data model (subject,predicate,object) See http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#data-model
                "type": "A String", # Required type of the column.
                "name": "A String", # Required name of the column.
              },
          ],
          "name": "A String", # Name assigned to a table.
        },
    ],
    "kind": "fusiontables#tableList", # Type name: a list of all tables.
  }</pre>
</div>

<div class="method">
    <code class="details" id="list_next">list_next(previous_request, previous_response)</code>
  <pre>Retrieves the next page of results.

Args:
  previous_request: The request for the previous page. (required)
  previous_response: The response from the request for the previous page. (required)

Returns:
  A request object that you can call 'execute()' on to request the next
  page. Returns None if there are no more items in the collection.
    </pre>
</div>

<div class="method">
    <code class="details" id="patch">patch(tableId, body, replaceViewDefinition=None)</code>
  <pre>Updates an existing table. Unless explicitly requested, only the name, description, and attribution will be updated. This method supports patch semantics.

Args:
  tableId: string, ID of the table that is being updated. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Represents a table. Specifies the name, whether it is exportable, description, attribution, and attribution link.
    "kind": "fusiontables#table", # Type name: a template for an individual table.
    "attribution": "A String", # Optional attribution assigned to the table.
    "description": "A String", # Optional description assigned to the table.
    "isExportable": True or False, # Variable for whether table is exportable.
    "baseTableIds": [ # Optional base table identifier if this table is a view or merged table.
      "A String",
    ],
    "attributionLink": "A String", # Optional link for attribution.
    "sql": "A String", # Optional sql that encodes the table definition for derived tables.
    "tableId": "A String", # Encrypted unique alphanumeric identifier for the table.
    "columns": [ # Columns in the table.
      { # Specifies the id, name and type of a column in a table.
          "kind": "fusiontables#column", # Type name: a template for an individual column.
          "description": "A String", # Optional column description.
          "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
            "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
            "columnId": 42, # The id of the column in the base table from which this column is derived.
          },
          "columnId": 42, # Identifier for the column.
          "graph_predicate": "A String", # Optional column predicate. Used to map table to graph data model (subject,predicate,object) See http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#data-model
          "type": "A String", # Required type of the column.
          "name": "A String", # Required name of the column.
        },
    ],
    "name": "A String", # Name assigned to a table.
  }

  replaceViewDefinition: boolean, Should the view definition also be updated? The specified view definition replaces the existing one. Only a view can be updated with a new definition.

Returns:
  An object of the form:

    { # Represents a table. Specifies the name, whether it is exportable, description, attribution, and attribution link.
      "kind": "fusiontables#table", # Type name: a template for an individual table.
      "attribution": "A String", # Optional attribution assigned to the table.
      "description": "A String", # Optional description assigned to the table.
      "isExportable": True or False, # Variable for whether table is exportable.
      "baseTableIds": [ # Optional base table identifier if this table is a view or merged table.
        "A String",
      ],
      "attributionLink": "A String", # Optional link for attribution.
      "sql": "A String", # Optional sql that encodes the table definition for derived tables.
      "tableId": "A String", # Encrypted unique alphanumeric identifier for the table.
      "columns": [ # Columns in the table.
        { # Specifies the id, name and type of a column in a table.
            "kind": "fusiontables#column", # Type name: a template for an individual column.
            "description": "A String", # Optional column description.
            "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
              "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
              "columnId": 42, # The id of the column in the base table from which this column is derived.
            },
            "columnId": 42, # Identifier for the column.
            "graph_predicate": "A String", # Optional column predicate. Used to map table to graph data model (subject,predicate,object) See http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#data-model
            "type": "A String", # Required type of the column.
            "name": "A String", # Required name of the column.
          },
      ],
      "name": "A String", # Name assigned to a table.
    }</pre>
</div>

<div class="method">
    <code class="details" id="update">update(tableId, body, replaceViewDefinition=None)</code>
  <pre>Updates an existing table. Unless explicitly requested, only the name, description, and attribution will be updated.

Args:
  tableId: string, ID of the table that is being updated. (required)
  body: object, The request body. (required)
    The object takes the form of:

{ # Represents a table. Specifies the name, whether it is exportable, description, attribution, and attribution link.
    "kind": "fusiontables#table", # Type name: a template for an individual table.
    "attribution": "A String", # Optional attribution assigned to the table.
    "description": "A String", # Optional description assigned to the table.
    "isExportable": True or False, # Variable for whether table is exportable.
    "baseTableIds": [ # Optional base table identifier if this table is a view or merged table.
      "A String",
    ],
    "attributionLink": "A String", # Optional link for attribution.
    "sql": "A String", # Optional sql that encodes the table definition for derived tables.
    "tableId": "A String", # Encrypted unique alphanumeric identifier for the table.
    "columns": [ # Columns in the table.
      { # Specifies the id, name and type of a column in a table.
          "kind": "fusiontables#column", # Type name: a template for an individual column.
          "description": "A String", # Optional column description.
          "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
            "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
            "columnId": 42, # The id of the column in the base table from which this column is derived.
          },
          "columnId": 42, # Identifier for the column.
          "graph_predicate": "A String", # Optional column predicate. Used to map table to graph data model (subject,predicate,object) See http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#data-model
          "type": "A String", # Required type of the column.
          "name": "A String", # Required name of the column.
        },
    ],
    "name": "A String", # Name assigned to a table.
  }

  replaceViewDefinition: boolean, Should the view definition also be updated? The specified view definition replaces the existing one. Only a view can be updated with a new definition.

Returns:
  An object of the form:

    { # Represents a table. Specifies the name, whether it is exportable, description, attribution, and attribution link.
      "kind": "fusiontables#table", # Type name: a template for an individual table.
      "attribution": "A String", # Optional attribution assigned to the table.
      "description": "A String", # Optional description assigned to the table.
      "isExportable": True or False, # Variable for whether table is exportable.
      "baseTableIds": [ # Optional base table identifier if this table is a view or merged table.
        "A String",
      ],
      "attributionLink": "A String", # Optional link for attribution.
      "sql": "A String", # Optional sql that encodes the table definition for derived tables.
      "tableId": "A String", # Encrypted unique alphanumeric identifier for the table.
      "columns": [ # Columns in the table.
        { # Specifies the id, name and type of a column in a table.
            "kind": "fusiontables#column", # Type name: a template for an individual column.
            "description": "A String", # Optional column description.
            "baseColumn": { # Optional identifier of the base column. If present, this column is derived from the specified base column.
              "tableIndex": 42, # Offset to the entry in the list of base tables in the table definition.
              "columnId": 42, # The id of the column in the base table from which this column is derived.
            },
            "columnId": 42, # Identifier for the column.
            "graph_predicate": "A String", # Optional column predicate. Used to map table to graph data model (subject,predicate,object) See http://www.w3.org/TR/2014/REC-rdf11-concepts-20140225/#data-model
            "type": "A String", # Required type of the column.
            "name": "A String", # Required name of the column.
          },
      ],
      "name": "A String", # Name assigned to a table.
    }</pre>
</div>

</body></html>