This page describes Calíope 1.5, the version we are building right now. 1.4 is finished and in App Review, and the store serves 1.3 on the Mac and 1.2 on iPad. The changelog says which version each feature landed in.

Adds an “Open in Calíope” button to every topic. It only works with the app installed.

Data Import

Import Data from CSV, JSON, or Excel

Load data from a CSV, JSON, or Excel (.xlsx) file directly into a MySQL table using the three-step import wizard.

Where it is: Schema tree › right-click › Import data…

The Data Import wizard lets you insert rows into a MySQL/MariaDB table from an external file, without needing to write SQL manually.

How to open the wizard:
In the Schema Tree, right-click a table and select "Import data…". The import wizard opens with that table as the destination.

Step 1 — Select file:
- Press Choose file and select a .csv, .json, or .xlsx file.
- CSV — the column separator is automatically detected (, or ;).
- JSON — must be an array of objects ([{"col": value}, …]).
- Excel (.xlsx) — the first sheet of the workbook is read. Note: .xlsx support reads the file as a ZIP and extracts the XML sheet; no third-party libraries are required.
- Enable "First row contains headers" if the first row defines column names (enabled by default).

Step 2 — Map columns:
- The mapping table shows each file column on the left and a destination column selector on the right.
- Select "— Ignore —" for any file column that should not be imported.
- Calíope attempts to automatically detect matches by name.

Step 3 — Import options:
- Choose the insert mode (see Import Modes topic).
- Adjust the batch size (default: 500 rows per INSERT). Larger batches are faster but consume more memory on the server.
- Press Import to start. A progress bar shows row-by-row progress.
- When finished, the number of inserted rows and any errors are displayed.

Available on macOS, iPad and iPhone.

Keywords: import, csv, json, excel, xlsx, data, load, wizard, file, rows, table, insert

Map Columns in the Import

How to assign source file columns to destination table columns in step 2 of the import wizard.

Where it is: Schema tree › right-click › Import data…

Step 2 of the wizard lets you control exactly how the file's columns are mapped to the MySQL table's columns.

How mapping works:
- Each row of the mapping table represents a column from the source file.
- The selector on the right shows the available columns in the destination table.
- Calíope attempts to match names automatically (case-insensitive).

Ignoring columns:
Select "— Ignore —" in a source column's selector to exclude it from the import. This is useful when the file has more columns than the table, or when a column should not be imported (e.g., auto-generated IDs).

Columns without automatic match:
If the file has a column whose name does not match any table column, it will appear with the selector set to "— Ignore —" by default. Assign it manually if appropriate.

First row as header:
If you enabled "First row contains headers" in the previous step, the column names come from that first row and are used for automatic mapping. If disabled, file columns are numbered (Column 1, Column 2, …).

Recommendation:
Before importing, verify that all NOT NULL columns without a DEFAULT value have a source column assigned; otherwise the server will reject the affected rows.

Keywords: mapping, columns, assignment, ignore, header, source, destination, import, csv, json, xlsx

Import Modes: INSERT, INSERT IGNORE, REPLACE

Choose how to handle primary or unique key conflicts during data import.

Where it is: Schema tree › right-click › Import data…

In Step 3 of the import wizard you can choose how the server should behave when an imported row conflicts with an existing primary or unique key.

INSERT (default):
Inserts each row normally. If a row violates a unique or primary key constraint, the import fails on that row and the batch is cancelled. Use this mode when data must not have duplicates and you want to detect conflicts.

INSERT IGNORE:
Inserts each row normally, but if a row violates a key constraint, it silently skips it and continues with the next. Duplicate key errors do not stop the import. Useful for duplicate-tolerant imports or when a subset of the data already exists in the table.

REPLACE:
If a row has the same primary or unique key as an existing row, it deletes the existing row and inserts the new one. Equivalent to a DELETE followed by an INSERT. Useful for updating existing data with newer versions from the file. Note that REPLACE may fire DELETE triggers and resets columns with DEFAULT if they are not in the file.

Summary:

ModeDuplicate foundExisting data
INSERTError — stops the batchPreserved
INSERT IGNORENew row is skippedPreserved
REPLACERow is replacedOverwritten

Available on macOS, iPad and iPhone.

Keywords: insert, insert ignore, replace, duplicates, conflict, primary key, unique key, mode, import, replace into