44import pyodbc
55import csv
66
7- driver = 'FreeTDS'
7+ driver = 'FreeTDS'
88
99parser = argparse .ArgumentParser ()
1010parser .parse_known_args ()
1111# Input file related arguments
12- parser .add_argument ('-f' , '--filename' , help = 'that contains the data to import' , default = os .environ .get ('FK_FILENAME' , default = None ))
12+ parser .add_argument ('-f' , '--filename' , help = 'that contains the data to import' ,
13+ default = os .environ .get ('FK_FILENAME' , default = None ))
1314parser .add_argument ('--comma-csv' , help = "CSV formatted file format" , action = "store_true" , default = True )
1415parser .add_argument ('--comma-delimited' , help = "comma ',' delimited file format" , action = "store_true" )
1516parser .add_argument ('--pipe-delimited' , help = "Pipe '|' delimited file format" , action = "store_true" )
1617# SQL related arguments
17- parser .add_argument ('-S' , '--server' , help = 'target SQL server' , default = os .environ .get ('FK_SERVER' , default = "127.0.0.1" ))
18- parser .add_argument ('-P' , '--port' , help = 'listen port port of the SQL service' , default = os .environ .get ('FK_PORT' , default = "5000" ))
18+ parser .add_argument ('-S' , '--server' , help = 'target SQL server' ,
19+ default = os .environ .get ('FK_SERVER' , default = "127.0.0.1" ))
20+ parser .add_argument ('-P' , '--port' , help = 'listen port port of the SQL service' ,
21+ default = os .environ .get ('FK_PORT' , default = "5000" ))
1922parser .add_argument ('-D' , '--database' , help = 'taget SQL database' , default = os .environ .get ('FK_DATBASE' , default = "cidb" ))
20- parser .add_argument ('-T' , '--table' , help = 'listen port port of the SQL service' , default = os .environ .get ('FK_TABLE' , default = "fakenames" ))
21- parser .add_argument ('-u' , '--username' , help = 'to authenticate to the SQL database' , default = os .environ .get ('FK_USERNAME' , default = "sa" ))
22- parser .add_argument ('-p' , '--password' , help = 'to access to the SQL database' , default = os .environ .get ('FK_PASSWORD' , default = "myPassword" ))
23+ parser .add_argument ('-T' , '--table' , help = 'listen port port of the SQL service' ,
24+ default = os .environ .get ('FK_TABLE' , default = "fakenames" ))
25+ parser .add_argument ('-u' , '--username' , help = 'to authenticate to the SQL database' ,
26+ default = os .environ .get ('FK_USERNAME' , default = "sa" ))
27+ parser .add_argument ('-p' , '--password' , help = 'to access to the SQL database' ,
28+ default = os .environ .get ('FK_PASSWORD' , default = "myPassword" ))
2329# Logger arguments
2430parser .add_argument ('-d' , '--debug' , help = "Enable debug logging" , action = "store_true" )
2531args , unknown = parser .parse_known_args ()
3642ch .setFormatter (formatter )
3743logger .addHandler (ch )
3844
45+
3946def connect ():
4047 # Connect to database
4148 logger .info ('Connecting to server "{0}:{1}" database "{2}"' .format (args .server , args .port , args .database ))
42- conn = pyodbc .connect (driver = driver , server = args .server , database = args .database ,port = args .port , uid = args .username , pwd = args .password )
49+ conn = pyodbc .connect (driver = driver , server = args .server , database = args .database , port = args .port , uid = args .username ,
50+ pwd = args .password )
4351 return conn
4452
4553
4654def create_table (dbconn , tablename ):
4755 logger .info ('Check if table "{0}" exists' .format (tablename ))
48-
56+
4957 cursor = dbconn .cursor ()
50-
58+
5159 cursor .execute ("""
5260 select name
5361 from sysobjects
5462 where type = "U" and name = '{0}'
5563 """ .format (tablename )
56- )
57-
58- try :
64+ )
65+
66+ try :
5967 cursor .fetchone ()[0 ]
6068
6169 logger .info ('Table "{0}" already exists.' .format (tablename ))
@@ -113,7 +121,7 @@ def create_table(dbconn, tablename):
113121 """ .format (tablename ))
114122
115123 dbconn .commit ()
116-
124+
117125
118126def import_pipe_delimited_data (dbconn , tablename , filename ):
119127 logger .info ('Load data from file "{0}" to table "{1}"' .format (filename , tablename ))
@@ -124,37 +132,36 @@ def import_pipe_delimited_data(dbconn, tablename, filename):
124132 cursor .commit ()
125133
126134 # Count total number of lines in the input file
127- with open (file = filename , mode = 'r' , newline = None , encoding = 'utf-8-sig' ) as f :
135+ with open (file = filename , mode = 'r' , newline = None , encoding = 'utf-8-sig' ) as f :
128136 reader = csv .reader (f , delimiter = '|' , quotechar = '"' )
129137 next (reader )
130138 lines = len (list (reader ))
131-
132139
133- with open (file = filename , mode = 'r' , newline = None , encoding = 'utf-8-sig' ) as f :
140+ with open (file = filename , mode = 'r' , newline = None , encoding = 'utf-8-sig' ) as f :
134141 reader = csv .reader (f , delimiter = '|' , quotechar = '"' )
135142 columns = next (reader )
136143 query = 'insert into ' + tablename + '({0}) values ({1})'
137144 query = query .format (',' .join (columns ), ',' .join ('?' * len (columns ))).lower ()
138- query = query .replace ('mothersmaiden' ,'maidenname' )
139- query = query .replace ('ups' ,'upstracking' )
140-
145+ query = query .replace ('mothersmaiden' , 'maidenname' )
146+ query = query .replace ('ups' , 'upstracking' )
147+
141148 logger .info ('Processing "{0}" lines' .format (lines ))
142149 record = 0
143150
144151 for data in reader :
145152 cursor = dbconn .cursor ()
146-
147- data [0 ] = int (data [0 ]) # number
148- data [8 ] = data [8 ].replace ('Ÿ' ,'Y' ) # city
149- data [15 ] = data [15 ].replace ('œ' ,'oe' ) # password
150- data [19 ] = int (data [19 ]) # telephonecountrycode
151- data [22 ] = int (data [22 ]) # age
152- data [38 ] = float (data [38 ]) # pounds
153- data [39 ] = float (data [39 ]) # kilograms
154- data [41 ] = int (data [41 ]) # centimeters
155- data [43 ] = float (data [43 ]) # latitude
156- data [44 ] = float (data [44 ]) # longitude
157-
153+
154+ data [0 ] = int (data [0 ]) # number
155+ data [8 ] = data [8 ].replace ('Ÿ' , 'Y' ) # city
156+ data [15 ] = data [15 ].replace ('œ' , 'oe' ) # password
157+ data [19 ] = int (data [19 ]) # telephonecountrycode
158+ data [22 ] = int (data [22 ]) # age
159+ data [38 ] = float (data [38 ]) # pounds
160+ data [39 ] = float (data [39 ]) # kilograms
161+ data [41 ] = int (data [41 ]) # centimeters
162+ data [43 ] = float (data [43 ]) # latitude
163+ data [44 ] = float (data [44 ]) # longitude
164+
158165 cursor .execute (query , data )
159166 cursor .commit ()
160167 record += 1
@@ -164,41 +171,41 @@ def import_pipe_delimited_data(dbconn, tablename, filename):
164171
165172def import_csv_delimited_data (dbconn , tablename , filename ):
166173 logger .info ('Load CSV data from file "{0}" to table "{1}"' .format (filename , tablename ))
167-
174+
168175 # Table configuration
169176 cursor = dbconn .cursor ()
170177 cursor .execute ('SET IDENTITY_INSERT {0} ON' .format (tablename ))
171178 cursor .commit ()
172179
173180 # Count total number of lines in the input file
174- with open (file = filename , mode = 'r' , newline = None , encoding = 'utf-8-sig' ) as f :
181+ with open (file = filename , mode = 'r' , newline = None , encoding = 'utf-8-sig' ) as f :
175182 reader = csv .DictReader (f )
176183 lines = len (list (reader ))
177184
178- with open (file = filename , mode = 'r' , newline = None , encoding = 'utf-8-sig' ) as f :
185+ with open (file = filename , mode = 'r' , newline = None , encoding = 'utf-8-sig' ) as f :
179186 reader = csv .DictReader (f )
180187 query = 'insert into ' + tablename + '({0}) values ({1})'
181188 query = query .format (',' .join (reader .fieldnames ), ',' .join ('?' * len (reader .fieldnames ))).lower ()
182- query = query .replace ('mothersmaiden' ,'maidenname' )
183- query = query .replace ('ups' ,'upstracking' )
189+ query = query .replace ('mothersmaiden' , 'maidenname' )
190+ query = query .replace ('ups' , 'upstracking' )
184191
185192 logger .info ('Processing "{0}" lines' .format (lines ))
186193 record = 0
187-
194+
188195 for data in reader :
189196 cursor = dbconn .cursor ()
190-
197+
191198 data ['Number' ] = int (data ['Number' ])
192- data ['City' ] = data ['City' ].replace ('Ÿ' ,'Y' )
193- data ['Password' ] = data ['Password' ].replace ('œ' ,'oe' )
199+ data ['City' ] = data ['City' ].replace ('Ÿ' , 'Y' )
200+ data ['Password' ] = data ['Password' ].replace ('œ' , 'oe' )
194201 data ['TelephoneCountryCode' ] = int (data ['TelephoneCountryCode' ])
195202 data ['Age' ] = int (data ['Age' ])
196203 data ['Pounds' ] = float (data ['Pounds' ])
197204 data ['Kilograms' ] = float (data ['Kilograms' ])
198205 data ['Centimeters' ] = int (data ['Centimeters' ])
199206 data ['Latitude' ] = float (data ['Latitude' ])
200207 data ['Longitude' ] = float (data ['Longitude' ])
201-
208+
202209 cursor .execute (query , list (data .values ()))
203210 cursor .commit ()
204211 record += 1
@@ -212,18 +219,18 @@ def handle(event, context):
212219 if args .pipe_delimited :
213220 import_pipe_delimited_data (
214221 dbconn = dbconn ,
215- tablename = args .table ,
222+ tablename = args .table ,
216223 filename = args .filename
217- )
224+ )
218225 else :
219226 import_csv_delimited_data (
220227 dbconn = dbconn ,
221228 tablename = args .table ,
222229 filename = args .filename
223- )
230+ )
224231
225232
226233if __name__ == '__main__' :
227234 event = {}
228235 context = {}
229- handle (event , context )
236+ handle (event , context )
0 commit comments