You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

32 lines
1.1 KiB

#!/usr/bin/env python
import csv, re
from subprocess import call
infile = input("File to load:")
db = input("DB to load into:")
table = input("Table to load into:")
fh = csv.reader(open(infile, 'r'), delimiter=';', quotechar='#')
headers = next(fh)
def variablize(text, prefix=''):
if not prefix:
# if no prefix, move any digits or non-word chars to the end
parts = re.match('(^[\W\d]*)(.*$)', text).groups()
text = "%s %s" % (parts[1], parts[0])
text = ("%s %s" % (prefix, text)).strip().lower()
text = re.sub('[\W]', '_', text)
return re.sub('_*$', '', text)
columns = map(variablize, open(infile).readline().split(';'))
columns = map(lambda v: '%s varchar(128)' % v, columns)
queries = [
'drop table %s;' % table,
'create table %s (%s);' % (table, ','.join(columns)),
"copy %s from '%s' with csv header;" % (table, infile),
'alter table %s add column id serial;' % table,
'alter table %s add primary key (id);' % table,
]
for q in queries:
call(['psql','-a','-d',db,'-c',q])