CSV to SQL

Генерація SQL INSERT statements із CSV-даних

Спробувати приклад

CSV-введення

SQL-виведення

Працює локально · Безпечно вставляти секрети
SQL з'явиться тут…
Назва таблиці:

Що таке конвертація CSV у SQL?

Конвертація CSV у SQL перетворює значення, розділені комами, на оператори мови структурованих запитів, які може виконати реляційна база даних. Найпоширенішим результатом є пара: оператор CREATE TABLE, що визначає стовпці, та один або кілька операторів INSERT INTO, які заповнюють ці стовпці рядками з CSV-файлу.

CSV-файли відповідають специфікації RFC 4180. Кожен рядок є записом, поля розділяються роздільником (зазвичай комою), а поля, що містять роздільник або символи нового рядка, беруться в подвійні лапки. SQL, своєю чергою, є стандартною мовою керування даними в таких системах, як PostgreSQL, MySQL, SQLite та SQL Server. Конвертація між цими двома форматами — одне з найпоширеніших завдань імпорту даних у розробці програмного забезпечення.

Належний конвертер CSV у SQL обробляє лапки, екранує одинарні лапки всередині значень (подвоюючи їх до '' відповідно до стандарту SQL), відображає заголовки стовпців у коректні SQL-ідентифікатори та може за потреби визначати типи даних. Окрім базового екранування, хороший конвертер нормалізує назви заголовків (замінюючи пробіли та дефіси на підкреслення) і загортає виведення в блок транзакції, щоб у разі помилки імпорту відбувся чистий відкат без часткових даних у таблиці. Без конвертера ручне написання INSERT statements навіть для кількох сотень рядків є схильним до помилок і займає багато часу.

Навіщо використовувати конвертер CSV у SQL?

Ручне написання SQL INSERT statements на основі даних із таблиць — виснажливе завдання, яке легко призводить до синтаксичних помилок. Конвертер автоматизує рутинні частини, щоб ви могли зосередитися на проектуванні схеми та перевірці даних.

Генерація SQL за секунди
Вставте CSV — отримайте готовий до виконання SQL. Не потрібно вручну брати рядки в лапки, екранувати апострофи чи рахувати стовпці. Конвертація виконується повністю у вашому браузері.
🔒
Дані залишаються у браузері
Ваш CSV ніколи не покидає ваш пристрій. Весь розбір і генерація SQL відбуваються на стороні клієнта — без завантаження на сервер, без журналювання та без доступу третіх сторін до ваших даних.
🎯
Коректний SQL-синтаксис
Одинарні лапки всередині значень екрануються як '' відповідно до стандарту SQL. Назви стовпців приводяться до коректних ідентифікаторів. Виведення синтаксично коректне для PostgreSQL, MySQL та SQLite.
📋
Підтримка будь-якої структури CSV
Інструмент автоматично визначає роздільники (кома, крапка з комою, табуляція, вертикальна риска) та обробляє поля в лапках із вбудованими комами або символами нового рядка відповідно до правил RFC 4180.

Випадки використання CSV у SQL

Заповнення бази даних тестовими даними
Перетворіть CSV-файл із фікстурами на INSERT statements для баз даних розробки або стейджингу. Корисно в CI-конвеєрах, де потрібні відтворювані початкові дані без ORM.
Міграція даних
Перенесіть дані, експортовані з однієї системи (CRM, таблиця, застаріла програма), до нової реляційної бази даних. Згенеруйте SQL, перегляньте його, а потім виконайте в межах транзакції.
Розробка backend API
Швидко заповніть локальний екземпляр PostgreSQL або MySQL тестовими даними з CSV. Швидше, ніж писати скрипт міграції, якщо потрібне лише одноразове завантаження.
QA та автоматизація тестування
Генеруйте SQL із CSV-фікстур для налаштування стану бази даних перед інтеграційними тестами. Поєднайте зі скриптом очищення для скидання таблиці між запусками тестів.
Підготовка до аналізу даних
Завантажте CSV-набори даних у SQLite для довільних запитів. SQLite читає SQL INSERT statements безпосередньо, що робить цей шлях швидким — від експорту таблиці до даних, доступних для запитів.
Вивчення SQL
Студенти можуть конвертувати зразкові CSV у SQL для відпрацювання запитів SELECT, JOIN та агрегатних функцій на реалістичних даних без необхідності створювати схему з нуля.

Довідник типів даних SQL

При конвертації CSV у SQL кожен стовпець за замовчуванням отримує тип TEXT, оскільки CSV не містить метаданих про типи. Якщо ви знаєте типи стовпців, замініть TEXT у виведенні CREATE TABLE. У цій таблиці наведено найпоширеніші SQL-типи та сфери їх застосування.

ТипВикористовується дляПримітки
TEXT / VARCHARStrings, mixed contentDefault safe choice; works in every SQL dialect
INTEGER / INTWhole numbers (age, count, ID)Use when column contains only digits with no decimals
REAL / FLOATDecimal numbers (price, rate)Needed for columns with dots like 19.99 or 3.14
DATEISO 8601 dates (2024-01-15)Requires consistent formatting; varies by database
BOOLEANtrue/false, 1/0, yes/noMySQL uses TINYINT(1); PostgreSQL has native BOOL
NUMERIC / DECIMALExact precision (currency)Specify scale: DECIMAL(10,2) for money columns
BLOB / BYTEABinary dataRarely needed in CSV imports; use for hex-encoded fields

Порівняння SQL-діалектів

Синтаксис SQL різниться між движками баз даних. Згенеровані INSERT statements використовують стандартний SQL, що працює в більшості систем, але деякі функції відрізняються. У цій таблиці узагальнено відмінності, які найбільше важливі при імпорті CSV-даних.

ФункціяPostgreSQLMySQLSQLiteSQL Server
Identifier quoting"col"`col`"col"[col]
String escape'''' or \'''''
INSERT syntaxINSERT INTOINSERT INTOINSERT INTOINSERT INTO
Batch INSERTVALUES (),()…VALUES (),()…VALUES (),()…max 1000 rows
Auto-incrementSERIALAUTO_INCREMENTAUTOINCREMENTIDENTITY(1,1)
Upsert / mergeON CONFLICTON DUPLICATE KEYON CONFLICTMERGE
NULL handlingIS NULLIS NULL / <=>IS NULLIS NULL
COPY from CSVCOPY … FROMLOAD DATA INFILE.importBULK INSERT

INSERT проти COPY: вибір методу імпорту

Для малих і середніх наборів даних (до 10 000 рядків) INSERT statements працюють добре та є переносними між будь-якими SQL-базами даних. Для великих імпортів бази даних надають команди масового завантаження, які повністю обходять SQL-парсер.

INSERT INTO
Стандартний SQL. Працює скрізь. Кожен рядок розбирається як SQL-оператор, тому накладні витрати вищі для великих наборів даних. Підтримує умовну логіку (ON CONFLICT, ON DUPLICATE KEY). Найкраще підходить для початкових даних, невеликих міграцій і випадків, коли потрібен контроль на рівні рядка.
COPY / LOAD DATA
Засіб масового завантаження, специфічний для конкретної бази даних. PostgreSQL використовує COPY, MySQL — LOAD DATA INFILE, SQLite — .import, SQL Server — BULK INSERT. Читає CSV безпосередньо, обходячи SQL-парсер. У 10–100 разів швидше для великих файлів (100K+ рядків). Потребує доступу до файлової системи на сервері або клієнті.

Приклади коду

Ці приклади показують, як конвертувати CSV у SQL INSERT statements різними мовами програмування. Кожен обробляє екранування одинарних лапок та очищення назв стовпців.

JavaScript (Node.js)
// CSV → SQL INSERT statements
const csv = `name,age,city
Alice,30,Berlin
Bob,25,Tokyo`

function csvToSql(csv, table = 'data') {
  const rows = csv.trim().split('\n').map(r => r.split(','))
  const [headers, ...data] = rows
  const cols = headers.map(h => h.trim().toLowerCase().replace(/\s+/g, '_'))

  const values = data.map(row =>
    '  (' + row.map(v => `'${v.replace(/'/g, "''").trim()}'`).join(', ') + ')'
  )

  return `INSERT INTO ${table} (${cols.join(', ')}) VALUES
${values.join(',\n')};`
}

console.log(csvToSql(csv, 'users'))
// → INSERT INTO users (name, age, city) VALUES
//     ('Alice', '30', 'Berlin'),
//     ('Bob', '25', 'Tokyo');
Python
import csv
import io

csv_string = """name,age,city
Alice,30,Berlin
Bob,25,Tokyo"""

reader = csv.reader(io.StringIO(csv_string))
headers = [h.strip().lower().replace(' ', '_') for h in next(reader)]

table = 'users'
rows = list(reader)

# CREATE TABLE
col_defs = ', '.join(f'{h} TEXT' for h in headers)
print(f'CREATE TABLE {table} ({col_defs});')
# → CREATE TABLE users (name TEXT, age TEXT, city TEXT);

# INSERT statements
for row in rows:
    vals = ', '.join(f"'{v.replace(chr(39), chr(39)*2)}'" for v in row)
    print(f"INSERT INTO {table} ({', '.join(headers)}) VALUES ({vals});")
# → INSERT INTO users (name, age, city) VALUES ('Alice', '30', 'Berlin');
# → INSERT INTO users (name, age, city) VALUES ('Bob', '25', 'Tokyo');
Go
package main

import (
	"encoding/csv"
	"fmt"
	"strings"
)

func csvToSQL(data, table string) string {
	r := csv.NewReader(strings.NewReader(data))
	records, _ := r.ReadAll()
	if len(records) < 2 {
		return ""
	}

	headers := records[0]
	var vals []string
	for _, row := range records[1:] {
		escaped := make([]string, len(row))
		for i, v := range row {
			escaped[i] = "'" + strings.ReplaceAll(v, "'", "''") + "'"
		}
		vals = append(vals, "  ("+strings.Join(escaped, ", ")+")")
	}

	return fmt.Sprintf("INSERT INTO %s (%s) VALUES\n%s;",
		table, strings.Join(headers, ", "), strings.Join(vals, ",\n"))
}

func main() {
	csv := "name,age,city\nAlice,30,Berlin\nBob,25,Tokyo"
	fmt.Println(csvToSQL(csv, "users"))
	// → INSERT INTO users (name, age, city) VALUES
	//     ('Alice', '30', 'Berlin'),
	//     ('Bob', '25', 'Tokyo');
}
CLI (sqlite3 / psql)
# SQLite: import CSV directly into a table
sqlite3 mydb.db <<EOF
.mode csv
.import data.csv users
SELECT * FROM users LIMIT 5;
EOF

# PostgreSQL: COPY from CSV file (server-side)
psql -c "COPY users FROM '/path/to/data.csv' WITH (FORMAT csv, HEADER true);"

# PostgreSQL: \copy from CSV (client-side, no superuser needed)
psql -c "\copy users FROM 'data.csv' WITH (FORMAT csv, HEADER true);"

# MySQL: LOAD DATA from CSV
mysql -e "LOAD DATA INFILE '/path/to/data.csv' INTO TABLE users
  FIELDS TERMINATED BY ',' ENCLOSED BY '"'
  LINES TERMINATED BY '\n' IGNORE 1 ROWS;"

Часті запитання

Як обробляються одинарні лапки в значеннях CSV у SQL-виведенні?
Кожна одинарна лапка (') у значенні CSV подвоюється до '' у SQL-виведенні. Це стандартна escape-послідовність SQL. Наприклад, значення "O'Brien" перетворюється на 'O''Brien' в операторі INSERT. Це працює в PostgreSQL, MySQL, SQLite та SQL Server.
Чи можна конвертувати CSV у SQL для конкретної бази даних, наприклад MySQL або PostgreSQL?
Згенеровані INSERT statements використовують стандартний SQL-синтаксис, який підтримують як MySQL, так і PostgreSQL. Основна відмінність — взяття ідентифікаторів у лапки: PostgreSQL використовує подвійні лапки, MySQL — зворотні. Для базових операцій INSERT виведення працює в обох без змін.
Що станеться, якщо мій CSV не має рядка заголовків?
Конвертер вважає перший рядок заголовками стовпців. Якщо у вашому CSV немає заголовків, додайте рядок заголовків перед конвертацією, інакше перший рядок даних стане назвами стовпців в операторі CREATE TABLE. Більшість конвертерів, включно з цим, вимагають рядка заголовків.
Чи є обмеження на кількість рядків при конвертації CSV у SQL?
Оскільки конвертація виконується у вашому браузері, практичне обмеження залежить від пам'яті пристрою. Файли з десятками тисяч рядків конвертуються без проблем. Для дуже великих файлів (500K+ рядків) розгляньте використання вбудованої команди COPY або LOAD DATA вашої бази даних замість INSERT statements.
Чому у виведенні для всіх стовпців використовується TEXT замість INTEGER або DATE?
CSV — це формат звичайного тексту без метаданих про типи. Конвертер використовує TEXT як безпечне значення за замовчуванням, щоб уникнути неправильного визначення типів. Ви можете змінити типи стовпців у згенерованому операторі CREATE TABLE після перегляду ваших даних. Звичайні корективи — INTEGER для числових стовпців і DATE для стовпців із датами.
Як обробляти CSV-файли з крапкою з комою або табуляцією як роздільниками?
Цей інструмент автоматично визначає роздільник, аналізуючи перший рядок вашого CSV. Він перевіряє коми, крапки з комою, символи табуляції та вертикальні риски, а потім використовує той, що зустрічається найчастіше. CSV у європейському форматі з крапками з комою працюють без жодних змін у налаштуваннях.
Чи захищений згенерований SQL від ін'єкцій, якщо виконати його безпосередньо?
У виведенні екрануються одинарні лапки, що запобігає випадковим синтаксичним помилкам. Однак якщо ваші CSV-дані надходять із ненадійного джерела, ставтеся до згенерованого SQL так само, як до будь-якого неперевіреного введення. Перегляньте виведення перед виконанням у виробничій базі даних. Для програмного імпорту параметризовані запити завжди безпечніші за конкатенацію рядків.