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() |