To test with http://www.maxmind.com/en/worldcities:
$ gzcat worldcitiespop.txt.gz | python csv2db.py worldcitiespop
$ sqlite3 worldcitiespop.db
To test with http://www.maxmind.com/en/worldcities:
$ gzcat worldcitiespop.txt.gz | python csv2db.py worldcitiespop
$ sqlite3 worldcitiespop.db
#!/usr/bin/env python | |
import codecs | |
import cStringIO | |
import csv | |
import os | |
import sqlite3 | |
import sys | |
dbname = sys.argv[1] if len(sys.argv) > 1 else 'data' | |
if os.path.exists(dbname + '.db'): | |
os.unlink(dbname + '.db') | |
dbconn = sqlite3.connect(dbname + '.db') | |
cursor = dbconn.cursor() | |
params = [] | |
def create_table(columns): | |
columns_with_types = ['%s text' % column for column in columns] | |
create_stmt = 'create table %s (%s)' % (dbname, ', '.join(columns_with_types)) | |
global params | |
params = ','.join(['?'] * len(row)) | |
cursor.execute(create_stmt) | |
def insert(row): | |
param_values = [unicode(v, 'utf-8', errors='ignore') for v in row]) | |
cursor.execute('insert into %s values (%s)' % (dbname, params), param_values) | |
header = True | |
reader = csv.reader(codecs.EncodedFile(sys.stdin, 'utf-8', errors='ignore')) | |
for row in reader: | |
if header: | |
create_table(row) | |
header = False | |
continue | |
insert(row) | |
dbconn.commit() | |
dbconn.close() |