Mercurial > hg > Lemuriformes
comparison lemuriformes/csv2sql.py @ 12:82cd4e0b66cf
csv2sql
author | Jeff Hammel <k0scist@gmail.com> |
---|---|
date | Sun, 10 Dec 2017 15:18:00 -0800 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
11:afc259799019 | 12:82cd4e0b66cf |
---|---|
1 #!/usr/bin/env python | |
2 | |
3 """ | |
4 convert CSV to SQL | |
5 """ | |
6 # (whitepaper) | |
7 | |
8 import sys | |
9 from .cast import infer | |
10 from .cli import ConfigurationParser | |
11 from .columns import read_columns | |
12 from .url2sql import url2sql | |
13 | |
14 def main(args=sys.argv[1:]): | |
15 """CLI""" | |
16 | |
17 # parse command line | |
18 parser = ConfigurationParser(description=__doc__) | |
19 parser.add_argument('csv', | |
20 type=read_columns, | |
21 help="CSV source to read") | |
22 parser.add_argument('sql', | |
23 type=url2sql, | |
24 help="SQL connection URL") | |
25 parser.add_argument('table', # TODO: this would be nice to have as part of the URL </sugar> | |
26 help="SQL table to create") | |
27 options = parser.parse_args(args) | |
28 | |
29 # infer column types | |
30 columns = options.csv.keys() | |
31 column_types = {column: infer(options.csv[column]) | |
32 for column in columns} | |
33 | |
34 # cast columns | |
35 for column in columns: | |
36 _type = column_types[column] | |
37 options.csv[column] = [_type(v) for v in options.csv[column]] | |
38 | |
39 # TODO: | |
40 # - create table(s) | |
41 # - populate data | |
42 | |
43 | |
44 if __name__ == '__main__': | |
45 main() |