49 lines
1.8 KiB
Python
49 lines
1.8 KiB
Python
|
import subprocess
|
||
|
|
||
|
from django.db.backends.base.client import BaseDatabaseClient
|
||
|
|
||
|
|
||
|
class DatabaseClient(BaseDatabaseClient):
|
||
|
executable_name = 'mysql'
|
||
|
|
||
|
@classmethod
|
||
|
def settings_to_cmd_args(cls, settings_dict):
|
||
|
args = [cls.executable_name]
|
||
|
db = settings_dict['OPTIONS'].get('db', settings_dict['NAME'])
|
||
|
user = settings_dict['OPTIONS'].get('user', settings_dict['USER'])
|
||
|
passwd = settings_dict['OPTIONS'].get('passwd', settings_dict['PASSWORD'])
|
||
|
host = settings_dict['OPTIONS'].get('host', settings_dict['HOST'])
|
||
|
port = settings_dict['OPTIONS'].get('port', settings_dict['PORT'])
|
||
|
server_ca = settings_dict['OPTIONS'].get('ssl', {}).get('ca')
|
||
|
client_cert = settings_dict['OPTIONS'].get('ssl', {}).get('cert')
|
||
|
client_key = settings_dict['OPTIONS'].get('ssl', {}).get('key')
|
||
|
defaults_file = settings_dict['OPTIONS'].get('read_default_file')
|
||
|
# Seems to be no good way to set sql_mode with CLI.
|
||
|
|
||
|
if defaults_file:
|
||
|
args += ["--defaults-file=%s" % defaults_file]
|
||
|
if user:
|
||
|
args += ["--user=%s" % user]
|
||
|
if passwd:
|
||
|
args += ["--password=%s" % passwd]
|
||
|
if host:
|
||
|
if '/' in host:
|
||
|
args += ["--socket=%s" % host]
|
||
|
else:
|
||
|
args += ["--host=%s" % host]
|
||
|
if port:
|
||
|
args += ["--port=%s" % port]
|
||
|
if server_ca:
|
||
|
args += ["--ssl-ca=%s" % server_ca]
|
||
|
if client_cert:
|
||
|
args += ["--ssl-cert=%s" % client_cert]
|
||
|
if client_key:
|
||
|
args += ["--ssl-key=%s" % client_key]
|
||
|
if db:
|
||
|
args += [db]
|
||
|
return args
|
||
|
|
||
|
def runshell(self):
|
||
|
args = DatabaseClient.settings_to_cmd_args(self.connection.settings_dict)
|
||
|
subprocess.check_call(args)
|