CSV'den SQL'e Dönüştürücü

CSV verilerinden SQL INSERT sorguları oluşturun

Örnek dene

CSV Girişi

SQL Çıktısı

Yerel olarak çalışır · Gizli bilgi yapıştırmak güvenlidir
SQL burada görünecek…
Tablo adı:

CSV'den SQL'e Dönüşüm Nedir?

CSV'den SQL'e dönüşüm, virgülle ayrılmış değerleri ilişkisel bir veritabanının çalıştırabileceği Structured Query Language sorgularına dönüştürür. En yaygın çıktı bir çiftten oluşur: sütunları tanımlayan bir CREATE TABLE sorgusu ve CSV dosyasındaki satırlarla bu sütunları dolduran bir veya daha fazla INSERT INTO sorgusu.

CSV dosyaları RFC 4180 belirtimini izler. Her satır bir kayıttır, alanlar bir ayırıcıyla (genellikle virgül) birbirinden ayrılır ve ayırıcı ya da yeni satır içeren alanlar çift tırnak içine alınır. SQL ise PostgreSQL, MySQL, SQLite ve SQL Server gibi sistemlerde verileri yönetmek için kullanılan standart dildir. Bu iki biçim arasındaki dönüşüm, yazılım geliştirmede en sık karşılaşılan veri içe aktarma görevlerinden biridir.

İyi bir CSV-to-SQL dönüştürücüsü tırnak işlemlerini yönetir, değerlerin içindeki tek tırnakları SQL standardına göre iki katına çıkararak '' biçimine dönüştürür, sütun başlıklarını geçerli SQL tanımlayıcılarıyla eşler ve isteğe bağlı olarak veri türlerini çıkarabilir. Temel kaçış işlemlerinin ötesinde, iyi bir dönüştürücü başlık adlarını normalleştirir (boşlukları ve kısa çizgileri alt çizgiyle değiştirir) ve çıktıyı bir işlem bloğuna sarar; böylece içe aktarma başarısız olursa tabloda kısmi veri bırakmak yerine temiz bir geri alma gerçekleşir. Dönüştürücü olmadan birkaç yüz satır için bile INSERT sorgularını elle yazmak hem hataya açıktır hem de yavaştır.

Neden CSV'den SQL'e Dönüştürücü Kullanmalısınız?

Elektronik tablo verilerinden SQL INSERT sorgularını elle yazmak yorucu bir iştir ve sözdizimi hatalarına davetiye çıkarır. Bir dönüştürücü tekrar eden kısımları otomatikleştirir; böylece şema tasarımına ve veri doğrulamaya odaklanabilirsiniz.

Saniyeler içinde SQL oluşturun
CSV'nizi yapıştırın, çalıştırmaya hazır SQL çıktısı alın. Dizeleri elle tırnak içine almak, kesme işaretlerini kaçırmak ya da sütunları saymak gerekmez. Dönüşüm tamamen tarayıcınızda çalışır.
🔒
Verilerinizi tarayıcınızda tutun
CSV'niz hiçbir zaman cihazınızdan çıkmaz. Tüm ayrıştırma ve SQL oluşturma işlemleri istemci tarafında gerçekleşir; bu da sunucuya yükleme, günlük kaydı ve veri kümenize üçüncü taraf erişimi olmadığı anlamına gelir.
🎯
Doğru SQL sözdizimi üretin
Değerlerin içindeki tek tırnaklar SQL standardına göre '' olarak kaçırılır. Sütun adları geçerli tanımlayıcılara dönüştürülür. Çıktı PostgreSQL, MySQL ve SQLite için sözdizimsel olarak geçerlidir.
📋
Her türlü CSV yapısını destekler
Araç, ayırıcıları (virgül, noktalı virgül, sekme, pipe) otomatik algılar ve RFC 4180 kurallarına uyarak gömülü virgül veya yeni satır içeren tırnaklı alanları işler.

CSV'den SQL'e Dönüştürme Kullanım Senaryoları

Veritabanı Başlangıç Verisi
Bir CSV fikstür dosyasını geliştirme veya hazırlık veritabanları için INSERT sorgularına dönüştürün. ORM kullanmadan tekrarlanabilir başlangıç verisi gereken CI/CD süreçlerinde kullanışlıdır.
Veri Göçü
Bir sistemden (CRM, elektronik tablo, eski uygulama) dışa aktarılan verileri yeni bir ilişkisel veritabanına taşıyın. SQL'i oluşturun, inceleyin, ardından bir işlem içinde çalıştırın.
Backend API Geliştirme
Yerel bir PostgreSQL veya MySQL örneğini CSV'den alınan test verileriyle hızlıca doldurun. Yalnızca tek seferlik bir yükleme gerektiğinde göç betiği yazmaktan daha hızlıdır.
QA ve Test Otomasyonu
Entegrasyon testlerinden önce veritabanı durumunu ayarlamak için CSV test fikstürlerinden SQL oluşturun. Test çalıştırmaları arasında tabloyu sıfırlamak için bir temizleme betiğiyle eşleştirin.
Veri Analizi Hazırlığı
CSV veri kümelerini geçici sorgular için SQLite'a yükleyin. SQLite, SQL INSERT sorgularını doğrudan okur; bu da elektronik tablo dışa aktarımından sorgulanabilir veriye giden hızlı bir yol sağlar.
SQL Öğrenme
Öğrenciler, sıfırdan şema kurmadan gerçeğe benzer veriler üzerinde SELECT, JOIN ve toplu sorgu alıştırması yapmak için örnek CSV dosyalarını SQL'e dönüştürebilir.

SQL Veri Türleri Başvurusu

CSV'yi SQL'e dönüştürürken CSV'nin tür meta verisi olmadığından her sütun varsayılan olarak TEXT türüne ayarlanır. Sütun türlerini biliyorsanız, CREATE TABLE çıktısındaki TEXT değerlerini değiştirebilirsiniz. Bu tablo en yaygın SQL türlerini ve her birinin ne zaman kullanılacağını gösterir.

TürKullanım AlanıNotlar
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 Diyalekti Karşılaştırması

SQL sözdizimi veritabanı motorları arasında farklılık gösterir. Oluşturulan INSERT sorguları çoğu sistemde çalışan standart SQL kullanır; ancak bazı özellikler farklıdır. Bu tablo, CSV verisi içe aktarırken en önemli farkları özetler.

ÖzellikPostgreSQLMySQLSQLiteSQL 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 ve COPY: İçe Aktarma Yöntemi Seçimi

Küçük ve orta büyüklükteki veri kümeleri için (10.000 satırın altında) INSERT sorguları iyi çalışır ve her SQL veritabanında taşınabilirdir. Büyük içe aktarmalar için veritabanları, SQL ayrıştırıcısını tamamen atlayan toplu yükleme komutları sağlar.

INSERT INTO
Standart SQL. Her yerde çalışır. Her satır bir SQL sorgusu olarak ayrıştırıldığından büyük veri kümeleri için ek yük daha yüksektir. Koşullu mantığı destekler (ON CONFLICT, ON DUPLICATE KEY). Başlangıç verisi, küçük göçler ve satır düzeyinde denetim gereken durumlar için idealdir.
COPY / LOAD DATA
Veritabanına özgü toplu yükleyici. PostgreSQL COPY, MySQL LOAD DATA INFILE, SQLite .import, SQL Server ise BULK INSERT kullanır. CSV'yi doğrudan okur, SQL ayrıştırıcısını atlar. Büyük dosyalar (100.000+ satır) için 10-100 kat daha hızlıdır. Sunucuda veya istemcide dosya sistemi erişimi gerektirir.

Kod Örnekleri

Bu örnekler, farklı dillerde CSV'yi SQL INSERT sorgularına nasıl dönüştüreceğinizi gösterir. Her biri tek tırnak kaçırma ve sütun adı temizleme işlemlerini kapsar.

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;"

Sık Sorulan Sorular

CSV değerlerindeki tek tırnaklar SQL çıktısında nasıl işlenir?
CSV değerindeki her tek tırnak ('), SQL çıktısında '' olarak iki katına çıkarılır. Bu, SQL standardı kaçış dizisidir. Örneğin "O'Brien" gibi bir değer, INSERT sorgusunda 'O''Brien' biçimine dönüşür. Bu yöntem PostgreSQL, MySQL, SQLite ve SQL Server'da çalışır.
CSV'yi MySQL veya PostgreSQL gibi belirli bir veritabanı için SQL'e dönüştürebilir miyim?
Oluşturulan INSERT sorguları, hem MySQL'in hem de PostgreSQL'in kabul ettiği standart SQL sözdizimini kullanır. Temel fark tanımlayıcı tırnak işaretlerindedir: PostgreSQL çift tırnak, MySQL ise ters tırnak kullanır. Temel INSERT işlemleri için çıktı değişiklik yapmadan her ikisinde de çalışır.
CSV'mde başlık satırı yoksa ne olur?
Dönüştürücü ilk satırı sütun başlıkları olarak ele alır. CSV'nizde başlık yoksa dönüştürmeden önce bir başlık satırı ekleyin; aksi takdirde ilk veri satırı CREATE TABLE sorgusundaki sütun adları olur. Bu araç dahil çoğu dönüştürücü bir başlık satırı gerektirir.
CSV'den SQL'e dönüşüm için satır sınırı var mı?
Dönüşüm tarayıcınızda çalıştığından pratik sınır, cihazınızın belleğine bağlıdır. On binlerce satır içeren dosyalar sorunsuz dönüştürülür. Çok büyük dosyalar (500.000+ satır) için INSERT sorguları yerine veritabanının yerel COPY veya LOAD DATA komutunu kullanmayı düşünün.
Neden çıktı tüm sütunlar için INTEGER veya DATE yerine TEXT kullanıyor?
CSV, tür meta verisi olmayan düz metin biçimidir. Dönüştürücü, yanlış tür çıkarımını önlemek için güvenli bir varsayılan olarak TEXT kullanır. Verilerinizi inceledikten sonra oluşturulan CREATE TABLE sorgusundaki sütun türlerini değiştirebilirsiniz. Sayısal sütunlar için INTEGER, tarih sütunları için DATE yaygın düzenlemelerdir.
Ayırıcı olarak noktalı virgül veya sekme kullanan CSV dosyalarını nasıl işlemeliyim?
Bu araç, CSV'nizin ilk satırını analiz ederek ayırıcıyı otomatik algılar. Virgül, noktalı virgül, sekme ve pipe karakterlerini kontrol eder, ardından en sık görüneni kullanır. Noktalı virgül kullanan Avrupa biçimli CSV'ler herhangi bir yapılandırma değişikliği gerektirmeden çalışır.
Doğrudan çalıştırdığımda oluşturulan SQL enjeksiyona karşı güvenli midir?
Çıktı tek tırnakları kaçırır; bu da yanlışlıkla oluşan sözdizimi hatalarını önler. Ancak CSV verileriniz güvenilmeyen bir kaynaktan geliyorsa, oluşturulan SQL'i doğrulanmamış her girdi gibi değerlendirin. Üretim veritabanına uygulamadan önce çıktıyı inceleyin. Programatik içe aktarmalar için parametreli sorgular her zaman dize birleştirmeye göre daha güvenlidir.