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