CSV to SQL
CSV डेटा से SQL INSERT स्टेटमेंट बनाएं
CSV इनपुट
SQL आउटपुट
CSV से SQL रूपांतरण क्या है?
CSV से SQL रूपांतरण, comma-separated values को ऐसे Structured Query Language स्टेटमेंट में बदलता है जिन्हें एक संबंधात्मक डेटाबेस execute कर सके। सबसे सामान्य आउटपुट एक जोड़ा होता है: एक CREATE TABLE स्टेटमेंट जो कॉलम परिभाषित करता है, और एक या अधिक INSERT INTO स्टेटमेंट जो CSV फ़ाइल की पंक्तियों से उन कॉलमों को डेटा से भरते हैं।
CSV फ़ाइलें RFC 4180 मानक का पालन करती हैं। प्रत्येक पंक्ति एक रिकॉर्ड होती है, फ़ील्ड एक delimiter (सामान्यतः अल्पविराम) द्वारा अलग होते हैं, और जिन फ़ील्ड में delimiter या नई लाइन हो उन्हें दोहरे उद्धरण चिह्नों में लपेटा जाता है। SQL, दूसरी ओर, PostgreSQL, MySQL, SQLite और SQL Server जैसी प्रणालियों में डेटा प्रबंधन की मानक भाषा है। इन दोनों प्रारूपों के बीच रूपांतरण, सॉफ़्टवेयर विकास में सबसे अधिक किए जाने वाले डेटा आयात कार्यों में से एक है।
एक अच्छा CSV-से-SQL कनवर्टर quoting को संभालता है, मानों के भीतर single quotes को escape करता है (SQL standard के अनुसार उन्हें '' में double करके), column headers को valid SQL identifiers में map करता है, और optionally data types का अनुमान लगा सकता है। इसके अलावा, एक अच्छा कनवर्टर header names को normalize करता है (spaces और hyphens को underscores से बदलकर) और output को एक transaction block में लपेटता है, ताकि import fail होने पर table में आधा-अधूरा डेटा जाने की बजाय changes rollback हो जाएं। कनवर्टर के बिना, कुछ सौ rows के लिए भी INSERT statements हाथ से लिखना गलतियों से भरा और धीमा होता है।
CSV से SQL कनवर्टर का उपयोग क्यों करें?
Spreadsheet data से SQL INSERT statements हाथ से लिखना थकाऊ है और syntax errors की संभावना बढ़ाता है। एक कनवर्टर repetitive काम को automate करता है ताकि आप schema design और data validation पर ध्यान दे सकें।
CSV से SQL के उपयोग के मामले
SQL डेटा प्रकार संदर्भ
CSV को SQL में बदलते समय, प्रत्येक कॉलम डिफ़ॉल्ट रूप से TEXT होता है क्योंकि CSV में कोई प्रकार मेटाडेटा नहीं होता। यदि आप कॉलम प्रकार जानते हैं, तो CREATE TABLE आउटपुट में TEXT को बदल सकते हैं। यह तालिका सबसे सामान्य SQL प्रकार और उनके उपयोग का समय दर्शाती है।
| प्रकार | उपयोग | टिप्पणियाँ |
|---|---|---|
| TEXT / VARCHAR | Strings, mixed content | Default safe choice; works in every SQL dialect |
| INTEGER / INT | Whole numbers (age, count, ID) | Use when column contains only digits with no decimals |
| REAL / FLOAT | Decimal numbers (price, rate) | Needed for columns with dots like 19.99 or 3.14 |
| DATE | ISO 8601 dates (2024-01-15) | Requires consistent formatting; varies by database |
| BOOLEAN | true/false, 1/0, yes/no | MySQL uses TINYINT(1); PostgreSQL has native BOOL |
| NUMERIC / DECIMAL | Exact precision (currency) | Specify scale: DECIMAL(10,2) for money columns |
| BLOB / BYTEA | Binary data | Rarely needed in CSV imports; use for hex-encoded fields |
SQL डायलेक्ट तुलना
SQL syntax विभिन्न डेटाबेस इंजनों के बीच भिन्न होती है। बनाए गए INSERT स्टेटमेंट मानक SQL का उपयोग करते हैं जो अधिकांश प्रणालियों में काम करता है, लेकिन कुछ विशेषताएं भिन्न होती हैं। यह तालिका उन अंतरों का सारांश देती है जो CSV डेटा आयात करते समय सबसे अधिक महत्वपूर्ण हैं।
| विशेषता | PostgreSQL | MySQL | SQLite | SQL Server |
|---|---|---|---|---|
| Identifier quoting | "col" | `col` | "col" | [col] |
| String escape | '' | '' or \' | '' | '' |
| INSERT syntax | INSERT INTO | INSERT INTO | INSERT INTO | INSERT INTO |
| Batch INSERT | VALUES (),()… | VALUES (),()… | VALUES (),()… | max 1000 rows |
| Auto-increment | SERIAL | AUTO_INCREMENT | AUTOINCREMENT | IDENTITY(1,1) |
| Upsert / merge | ON CONFLICT | ON DUPLICATE KEY | ON CONFLICT | MERGE |
| NULL handling | IS NULL | IS NULL / <=> | IS NULL | IS NULL |
| COPY from CSV | COPY … FROM | LOAD DATA INFILE | .import | BULK INSERT |
INSERT बनाम COPY: आयात विधि का चुनाव
छोटे से मध्यम डेटासेट (10,000 पंक्तियों से कम) के लिए, INSERT स्टेटमेंट अच्छी तरह काम करते हैं और हर SQL डेटाबेस में उपयोग योग्य हैं। बड़े आयात के लिए, डेटाबेस बल्क-लोडिंग आदेश प्रदान करते हैं जो SQL पार्सर को पूरी तरह बायपास करते हैं।
कोड उदाहरण
ये उदाहरण दर्शाते हैं कि विभिन्न भाषाओं में CSV को SQL INSERT स्टेटमेंट में कैसे बदला जाए। प्रत्येक single quote escape करने और कॉलम नाम शुद्धिकरण को संभालता है।
// 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');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');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');
}# 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;"