def create_seahub_db_engine(): import seahub_settings db_infos = seahub_settings.DATABASES['default'] #import local_settings #db_infos = local_settings.DATABASES['default'] if db_infos.get('ENGINE') != 'django.db.backends.mysql': _logger.warning('Failed to init seahub db, only mysql db supported.') return db_host = db_infos.get('HOST', '127.0.0.1') db_port = int(db_infos.get('PORT', '3306')) db_name = db_infos.get('NAME') if not db_name: _logger.warning ('Failed to init seahub db, db name is not set.') return db_user = db_infos.get('USER') if not db_user: _logger.warning ('Failed to init seahub db, db user is not set.') return db_passwd = db_infos.get('PASSWORD') db_url = "mysql+mysqldb://%s:%s@%s:%s/%s?charset=utf8" % (db_user, quote_plus(db_passwd), db_host, db_port, db_name) # Add pool recycle, or mysql connection will be closed by mysqld if idle # for too long. kwargs = dict(pool_recycle=300, echo=False, echo_pool=False) engine = create_engine(db_url, **kwargs) if not has_event_listener(Pool, 'checkout', ping_connection): # We use has_event_listener to double check in case we call create_engine # multipe times in the same process. add_event_listener(Pool, 'checkout', ping_connection) return engine
def create_engine_from_conf(config): need_connection_pool_fix = True if not config.has_section('database'): seafile_data_dir = os.environ['SEAFILE_CONF_DIR'] if seafile_data_dir: path = os.path.join(seafile_data_dir, 'seafile.db') else: logging.warning('SEAFILE_CONF_DIR not set, can not load sqlite database.') return None db_url = "sqlite:///%s" % path logging.info('[seafobj] database: sqlite3, path: %s', path) need_connection_pool_fix = False else: backend = config.get('database', 'type') if backend == 'mysql': if config.has_option('database', 'host'): host = config.get('database', 'host').lower() else: host = 'localhost' if config.has_option('database', 'port'): port = config.getint('database', 'port') else: port = 3306 username = config.get('database', 'user') passwd = config.get('database', 'password') dbname = config.get('database', 'db_name') db_url = "mysql+mysqldb://%s:%s@%s:%s/%s?charset=utf8" % (username, quote_plus(passwd), host, port, dbname) logging.warning('[seafobj] database: mysql, name: %s', dbname) elif backend == 'oracle': if config.has_option('database', 'host'): host = config.get('database', 'host').lower() else: host = 'localhost' if config.has_option('database', 'port'): port = config.getint('database', 'port') else: port = 1521 username = config.get('database', 'username') passwd = config.get('database', 'password') service_name = config.get('database', 'service_name') db_url = "oracle://%s:%s@%s:%s/%s" % (username, quote_plus(passwd), host, port, service_name) logging.info('[seafobj] database: oracle, service_name: %s', service_name) else: raise RuntimeError("Unknown database backend: %s" % backend) # Add pool recycle, or mysql connection will be closed by mysqld if idle # for too long. kwargs = dict(pool_recycle=300, echo=False, echo_pool=False) engine = create_engine(db_url, **kwargs) if need_connection_pool_fix and not has_event_listener(Pool, 'checkout', ping_connection): # We use has_event_listener to double check in case we call create_engine # multipe times in the same process. add_event_listener(Pool, 'checkout', ping_connection) return engine