client.py 1.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940
  1. import os
  2. import sys
  3. from django.db.backends import BaseDatabaseClient
  4. class DatabaseClient(BaseDatabaseClient):
  5. executable_name = 'mysql'
  6. def runshell(self):
  7. settings_dict = self.connection.settings_dict
  8. args = [self.executable_name]
  9. db = settings_dict['OPTIONS'].get('db', settings_dict['NAME'])
  10. user = settings_dict['OPTIONS'].get('user', settings_dict['USER'])
  11. passwd = settings_dict['OPTIONS'].get('passwd', settings_dict['PASSWORD'])
  12. host = settings_dict['OPTIONS'].get('host', settings_dict['HOST'])
  13. port = settings_dict['OPTIONS'].get('port', settings_dict['PORT'])
  14. defaults_file = settings_dict['OPTIONS'].get('read_default_file')
  15. # Seems to be no good way to set sql_mode with CLI.
  16. if defaults_file:
  17. args += ["--defaults-file=%s" % defaults_file]
  18. if user:
  19. args += ["--user=%s" % user]
  20. if passwd:
  21. args += ["--password=%s" % passwd]
  22. if host:
  23. if '/' in host:
  24. args += ["--socket=%s" % host]
  25. else:
  26. args += ["--host=%s" % host]
  27. if port:
  28. args += ["--port=%s" % port]
  29. if db:
  30. args += [db]
  31. if os.name == 'nt':
  32. sys.exit(os.system(" ".join(args)))
  33. else:
  34. os.execvp(self.executable_name, args)