> ## Documentation Index
> Fetch the complete documentation index at: https://ngquct-feat-ai-sql-walkthroughs.mintlify.site/llms.txt
> Use this file to discover all available pages before exploring further.

# Import & Export

> Export to CSV, JSON, SQL, MQL, or XLSX. Import SQL, JSON, and CSV files with column mapping and transaction safety.

# Import & Export

Export data in five formats (CSV, JSON, SQL, MQL, XLSX), import SQL, JSON, and CSV files (gzip supported for SQL), and paste tabular data from the clipboard into the grid.

## Export Data

1. Open a table, or run a query and use its results
2. Click **Export** in the toolbar (`Cmd+Shift+E`), or right-click the results grid and choose **Export Results...**
3. Choose a format, select tables in the tree view, configure options
4. Click **Export**

TablePro remembers the last format and options you exported with. Option changes stick only after a successful export; cancelling the dialog discards them. **Reset to Defaults** under the options restores the stock settings for the current format.

<Note>
  **MongoDB**: SQL export is not available. Use MQL, which generates `db.collection.insertMany([...])` scripts for `mongosh`. **Redis**: SQL and MQL exports are not available.
</Note>

<Frame caption="Export dialog">
  <img className="block dark:hidden" src="https://mintcdn.com/ngquct-feat-ai-sql-walkthroughs/REI9tfF_TGivM099/images/export-dialog.png?fit=max&auto=format&n=REI9tfF_TGivM099&q=85&s=467f04bf023b36070cfa7412c897f809" alt="Export dialog" width="1560" height="960" data-path="images/export-dialog.png" />

  <img className="hidden dark:block" src="https://mintcdn.com/ngquct-feat-ai-sql-walkthroughs/REI9tfF_TGivM099/images/export-dialog-dark.png?fit=max&auto=format&n=REI9tfF_TGivM099&q=85&s=81d5129e171710716069655d113a1fcd" alt="Export dialog" width="1560" height="960" data-path="images/export-dialog-dark.png" />
</Frame>

### Export Formats

<Tabs>
  <Tab title="CSV">
    | Option                                    | Default   |
    | ----------------------------------------- | --------- |
    | Header row                                | Yes       |
    | Delimiter (comma, semicolon, tab, pipe)   | Comma     |
    | Quote handling (always, as needed, never) | As needed |
    | NULL to empty strings                     | Yes       |
    | Line breaks in values to spaces           | No        |
    | Line ending (LF, CRLF, CR)                | LF        |
    | Decimal separator (period, comma)         | Period    |
    | Formula sanitization                      | Yes       |
  </Tab>

  <Tab title="JSON">
    Exports as an array of objects.

    | Option                         | Default |
    | ------------------------------ | ------- |
    | Pretty print                   | Yes     |
    | Include NULL values            | Yes     |
    | Preserve all values as strings | No      |
  </Tab>

  <Tab title="SQL">
    Global options:

    | Option                         | Default |
    | ------------------------------ | ------- |
    | Compress with gzip (`.sql.gz`) | No      |
    | Batch size (rows per INSERT)   | 500     |

    Per-table checkboxes, set individually for multi-table exports:

    | Column    | Includes             | Default |
    | --------- | -------------------- | ------- |
    | Structure | CREATE TABLE         | Yes     |
    | Drop      | DROP TABLE IF EXISTS | Yes     |
    | Data      | INSERT statements    | Yes     |
  </Tab>

  <Tab title="MQL">
    MongoDB only. Generates `insertMany()` scripts that run directly in `mongosh`. Batch size defaults to 500 documents per `insertMany`. Per-collection checkboxes cover drop, indexes, and data.

    Output is a `.js` file:

    ```javascript theme={null}
    db.users.insertMany([
      {"_id": {"$oid": "507f1f77bcf86cd799439011"}, "name": "Alice", "age": 30},
      {"_id": {"$oid": "507f1f77bcf86cd799439012"}, "name": "Bob", "age": 25}
    ]);
    ```
  </Tab>

  <Tab title="XLSX">
    | Option                           | Default |
    | -------------------------------- | ------- |
    | Include headers (bold first row) | Yes     |
    | NULL as empty cells              | Yes     |

    Each table exports as a separate worksheet. Numbers are stored as numeric cells. Tables exceeding 1,048,576 rows (Excel's limit) auto-split into multiple sheets.
  </Tab>
</Tabs>

### Streaming Export

Whole-table exports stream rows from the database straight to disk:

* Constant memory regardless of table size, no row-count limit
* Atomic write: the destination file appears only on success, partial files are removed on failure
* Cancellable from the progress dialog; cancelling removes the partial file

Result-grid exports use the in-memory result set. Use LIMIT in your query to control their size.

## Clipboard Paste (CSV/TSV)

Paste tabular data directly into the data grid. Press `Cmd+V` after selecting a row. Format is auto-detected: tabs parse as TSV, commas as CSV.

## Import Data

Import `.sql` and `.sql.gz` files (statements execute directly against your database: backups, migrations, seed data), `.json` / `.jsonl` files into a table, or `.csv` / `.tsv` files into a table with column mapping.

### Import SQL

<Steps>
  <Step title="Open Import Dialog">
    Click **File** > **Import** > **From SQL** (`Cmd+Shift+I`).
  </Step>

  <Step title="Configure Options">
    Set encoding, transaction wrapping, and foreign key check options. TablePro remembers the options from your last successful import; cancelling the dialog discards changes, and **Reset to Defaults** restores the stock settings.
  </Step>

  <Step title="Preview and Import">
    Review the SQL preview, statement count, and file size. Click **Import** to execute.
  </Step>
</Steps>

<Frame caption="Import dialog with SQL file preview">
  <img className="block dark:hidden" src="https://mintcdn.com/ngquct-feat-ai-sql-walkthroughs/REI9tfF_TGivM099/images/import-dialog.png?fit=max&auto=format&n=REI9tfF_TGivM099&q=85&s=569f2429b898b7cdcc12a3db431d599c" alt="Import dialog" width="1560" height="960" data-path="images/import-dialog.png" />

  <img className="hidden dark:block" src="https://mintcdn.com/ngquct-feat-ai-sql-walkthroughs/REI9tfF_TGivM099/images/import-dialog-dark.png?fit=max&auto=format&n=REI9tfF_TGivM099&q=85&s=8d4f4ea95a51226826412ea09e3da8d9" alt="Import dialog" width="1560" height="960" data-path="images/import-dialog-dark.png" />
</Frame>

### Import Options

| Option                     | Description                                        | Default           |
| -------------------------- | -------------------------------------------------- | ----------------- |
| On error                   | How to handle failed statements (see below)        | Stop and Rollback |
| Encoding                   | File encoding: UTF-8, UTF-16, Latin1, or ASCII     | UTF-8             |
| Wrap in transaction        | Execute all statements within a single transaction | Yes               |
| Disable foreign key checks | Temporarily disable FK constraints during import   | Yes               |

For PostgreSQL the checkbox runs `SET session_replication_role = replica`, which requires superuser (or, on PostgreSQL 15+, a `GRANT SET` on the parameter). If the server rejects the statement, the import stops with that error; uncheck the option to proceed. TablePro's SQL exports emit foreign key constraints with `ALTER TABLE ... ADD CONSTRAINT` after data load, so the dump imports in order without needing the privilege.

For MySQL the checkbox runs `SET FOREIGN_KEY_CHECKS = 0` and works on standard accounts. SQLite uses `PRAGMA foreign_keys = OFF`. Drivers without an equivalent (most NoSQL drivers) ignore the option.

### Error Handling Modes

| Mode                  | Behavior                                                                             |
| --------------------- | ------------------------------------------------------------------------------------ |
| **Stop and Rollback** | Stops on first error. If transaction is enabled, rolls back all changes. Default.    |
| **Stop and Commit**   | Stops on first error. Commits statements that succeeded before the error.            |
| **Skip and Continue** | Logs failed statements and continues. Transaction wrapping is disabled in this mode. |

In **Skip and Continue** mode, failed statements are collected (up to 1,000) with line numbers and error messages. After import completes, a summary shows how many succeeded vs failed, with a scrollable error list and a **Copy Errors to Clipboard** button.

### Import JSON Data

Choose **File** > **Import** > **From JSON** and pick a `.json`, `.jsonl`, or `.ndjson` file. The sheet accepts an array of objects `[{...}, {...}]`, newline-delimited JSON (one object per line, streamed for large files), and TablePro's own JSON export shape `{ "table": [ {...} ] }`, so an export round-trips back in.

Choose a destination:

* **Existing table**: pick the table, then map each JSON field to a column. Fields are auto-matched by name; toggle any field off to skip it, or remap it. Columns with no matching field keep their default or NULL.
* **New table**: name the table and review the columns TablePro infers from the data. Each column's name, type, primary key, nullable flag, and default are editable before the table is created.

Rows insert through parameterized statements, so JSON values are never concatenated into SQL. Nested objects and arrays are stored as JSON text.

### Import CSV Data

Choose **File** > **Import** > **From CSV** and pick a `.csv` or `.tsv` file. TablePro opens the same row import sheet used for JSON, with CSV-specific parsing options. The delimiter and encoding are auto-detected; the quote character defaults to a double quote. Change any parsing option and the field mapping re-reads the file. Destination options match JSON import: map into an existing table or create a new one.

| Option                           | Description                                              | Default            |
| -------------------------------- | -------------------------------------------------------- | ------------------ |
| Delimiter                        | Comma, semicolon, tab, or pipe                           | Auto-detect        |
| Quote character                  | Double or single quote                                   | Double quote (`"`) |
| Encoding                         | UTF-8, ISO Latin 1, or Windows-1252                      | Auto-detect        |
| First row is a header            | Use row 1 as column names; off imports every row as data | Yes                |
| Trim leading and trailing spaces | Trim each field before import                            | No                 |
| Treat empty values as NULL       | Insert NULL for empty fields instead of empty text       | Yes                |
| NULL text                        | An extra value imported as NULL, for example `\N`        | None               |

Quoted fields keep embedded commas and newlines (RFC 4180), and doubled quotes (`""`) decode to a single quote.

### Row Import Options

CSV and JSON imports insert rows in batches through parameterized statements. The on-error and transaction options work the same as SQL import. They add one option of their own: **Delete existing rows before import**, which clears the target table first. The delete runs inside the import transaction, so a failed import in the default Stop and Rollback mode restores the deleted rows.

During import, a progress bar shows rows processed and overall completion.
