def get_connection_string(self, db_schema=None, db_url='localhost'): """Return database connection string (e.g. for sqlalchemy). Parameters ---------- db_schema : db_schema Default database schema for the connection. db_url : str The IP address / domain name of the computer running the database server. With MySQL, if db_url == 'localhost', the client will try to establish the connection using a Unix domain socket instead. """ # Set `db_url` if db_url is None: db_url = socket.gethostbyname(socket.gethostname()) # Set `db_socket` if neccessary if db_url == 'localhost': db_socket = self.db_socket assert db_socket else: db_socket = None return make_connection_string( db_type=self.db_type, db_username='******', db_password='', db_url=db_url, db_port=str(self.db_port), # TODO: remove str() cast when updated db_schema=db_schema, db_socket=db_socket, )
def __init__( self, connection_string, shared_folder, storage_host, datadir=None, echo=False, db_engine=None, use_compression=False): self.connection_string = connection_string self.shared_folder = op.abspath(shared_folder) os.makedirs(self.shared_folder, exist_ok=True) self.storage_host = storage_host self.datadir = datadir self.db_engine = ( db_engine if db_engine is not None else MySQLDaemon._default_storage_engine) self.use_compression = use_compression # logger.debug("Connection string: {}".format(repr(self.connection_string))) self.engine = sa.create_engine(self.connection_string, echo=echo) try: self.db_schema = self._get_db_schema() except sa.exc.OperationalError: db_params = parse_connection_string(connection_string) _schema = db_params['db_schema'] db_params['db_schema'] = '' logger.debug("db_params: {}".format(db_params)) _connection_string = make_connection_string(**db_params) logger.debug("_connection_string: {}".format(_connection_string)) _engine = sa.create_engine(_connection_string, echo=echo) _engine.execute('CREATE DATABASE {}'.format(_schema)) self.db_schema = self._get_db_schema()
def drop_database_schema(self, db_schema): """Drop ELASPIC database schema.""" # Create engine without a default schema engine = sa.create_engine( make_connection_string(**{**parse_connection_string(conf.CONFIGS["connection_string"]), "db_schema": ""}) ) sql_command = "DROP SCHEMA IF EXISTS {};".format(db_schema) logger.debug("sql_command: '{}'".format(sql_command)) engine.execute(sql_command)
def read_database_configs(config): """[DATABASE].""" if config.get('connection_string'): CONFIGS['connection_string'] = config.get('connection_string') CONFIGS.update(parse_connection_string(CONFIGS['connection_string'])) elif config.get('db_type'): CONFIGS['db_type'] = config.get('db_type') CONFIGS['db_schema'] = config.get('db_schema') CONFIGS['db_database'] = config.get('db_database', fallback='') CONFIGS['db_username'] = config.get('db_username') CONFIGS['db_password'] = config.get('db_password') CONFIGS['db_url'] = config.get('db_url') CONFIGS['db_port'] = config.get('db_port') CONFIGS['db_socket'] = _get_db_socket( config, CONFIGS['db_type'], CONFIGS['db_url']) CONFIGS['connection_string'] = make_connection_string(**CONFIGS) CONFIGS['db_is_immutable'] = config.get('db_is_immutable', fallback=False)