1010class DatabaseClient (BaseDatabaseClient ):
1111 executable_name = 'sqlcmd'
1212
13- def runshell ( self ):
14- settings_dict = self . connection . settings_dict
13+ @ classmethod
14+ def settings_to_cmd_args ( cls , settings_dict , parameters ):
1515 options = settings_dict ['OPTIONS' ]
1616 user = options .get ('user' , settings_dict ['USER' ])
1717 password = options .get ('passwd' , settings_dict ['PASSWORD' ])
1818
1919 driver = options .get ('driver' , 'ODBC Driver 13 for SQL Server' )
2020 ms_drivers = re .compile ('^ODBC Driver .* for SQL Server$|^SQL Server Native Client' )
2121 if not ms_drivers .match (driver ):
22- self .executable_name = 'isql'
22+ cls .executable_name = 'isql'
2323
24- if self .executable_name == 'sqlcmd' :
24+ if cls .executable_name == 'sqlcmd' :
2525 db = options .get ('db' , settings_dict ['NAME' ])
2626 server = options .get ('host' , settings_dict ['HOST' ])
2727 port = options .get ('port' , settings_dict ['PORT' ])
2828 defaults_file = options .get ('read_default_file' )
2929
30- args = [self .executable_name ]
30+ args = [cls .executable_name ]
3131 if server :
3232 if port :
3333 server = ',' .join ((server , str (port )))
@@ -44,9 +44,11 @@ def runshell(self):
4444 args += ["-i" , defaults_file ]
4545 else :
4646 dsn = options .get ('dsn' , '' )
47- args = ['%s -v %s %s %s' % (self .executable_name , dsn , user , password )]
47+ args = ['%s -v %s %s %s' % (cls .executable_name , dsn , user , password )]
4848
49- try :
50- subprocess .check_call (args )
51- except KeyboardInterrupt :
52- pass
49+ args .extend (parameters )
50+ return args
51+
52+ def runshell (self , parameters = []):
53+ args = DatabaseClient .settings_to_cmd_args (self .connection .settings_dict , parameters )
54+ subprocess .run (args , check = True )
0 commit comments