def db_for_read_write(model, write=True): """ :param model: Django model being queried :param write: Default to True since the DB for writes can also handle reads :return: Django DB alias to use for query """ app_label = model._meta.app_label if app_label == SYNCLOGS_APP: return settings.SYNCLOGS_SQL_DB_ALIAS elif app_label == ICDS_REPORTS_APP: return connection_manager.get_django_db_alias(ICDS_UCR_CITUS_ENGINE_ID) elif app_label == AAA_APP: engine_id = AAA_DB_ENGINE_ID if not write: return connection_manager.get_load_balanced_read_db_alias(AAA_DB_ENGINE_ID) return connection_manager.get_django_db_alias(engine_id) if not settings.USE_PARTITIONED_DATABASE: return DEFAULT_DB_ALIAS if app_label == BLOB_DB_APP: if hasattr(model, 'partition_attr'): return partition_config.proxy_db return DEFAULT_DB_ALIAS if app_label == FORM_PROCESSOR_APP: return partition_config.proxy_db else: default_db = DEFAULT_DB_ALIAS if not write: return get_load_balanced_app_db(app_label, default_db) return default_db
def db_for_read_write(model, write=True): """ :param model: Django model being queried :param write: Default to True since the DB for writes can also handle reads :return: Django DB alias to use for query """ app_label = model._meta.app_label if app_label == WAREHOUSE_APP: return settings.WAREHOUSE_DATABASE_ALIAS elif app_label == SYNCLOGS_APP: return settings.SYNCLOGS_SQL_DB_ALIAS if not settings.USE_PARTITIONED_DATABASE: return 'default' if app_label == FORM_PROCESSOR_APP: return partition_config.get_proxy_db() elif app_label in (ICDS_MODEL, ICDS_REPORTS_APP): engine_id = ICDS_UCR_ENGINE_ID if not write: engine_id = connection_manager.get_load_balanced_read_db_alais(ICDS_UCR_ENGINE_ID) return connection_manager.get_django_db_alias(engine_id) else: default_db = partition_config.get_main_db() if not write: return connection_manager.get_load_balanced_read_db_alais(app_label, default_db) return default_db
def db_for_read_write(model, write=True, hints=None): """ :param model: Django model being queried :param write: Default to True since the DB for writes can also handle reads :return: Django DB alias to use for query """ hints = hints or {} app_label = model._meta.app_label if app_label == SYNCLOGS_APP: return settings.SYNCLOGS_SQL_DB_ALIAS if app_label in settings.CUSTOM_DB_ROUTING: db_alias = settings.CUSTOM_DB_ROUTING[app_label] if db_alias not in settings.DATABASES: db_alias = connection_manager.get_django_db_alias(db_alias) return db_alias if not settings.USE_PARTITIONED_DATABASE: return DEFAULT_DB_ALIAS if app_label == BLOB_DB_APP: if hasattr(model, 'partition_attr'): return get_read_write_db_for_partitioned_model(model, hints, write) return DEFAULT_DB_ALIAS if app_label in (FORM_PROCESSOR_APP, SCHEDULING_PARTITIONED_APP): return get_read_write_db_for_partitioned_model(model, hints, write) else: default_db = DEFAULT_DB_ALIAS if not write: return get_load_balanced_app_db(app_label, default_db) return default_db
def _get_table_size(config): table_name = get_table_name(config.domain, config.table_id) db_name = connection_manager.get_django_db_alias(config.engine_id) db_cursor = connections[db_name].cursor() with db_cursor as cursor: cursor.execute("SELECT pg_total_relation_size('\"%s\"')" % table_name, []) bytes = cursor.fetchone()[0] return bytes
def _get_count(config): table_name = get_table_name(config.domain, config.table_id) db_name = connection_manager.get_django_db_alias(config.engine_id) return _get_count_from_explain_raw( db_name, 'SELECT * FROM "%s"' % table_name, [] )
def _get_count(config): table_name = get_table_name(config.domain, config.table_id) db_name = connection_manager.get_django_db_alias(config.engine_id) query = ('SELECT * FROM "%s"' % table_name, []) try: return estimate_row_count(query, db_name) except ProgrammingError: return "Table not found"
def handle(self, engine_id, **options): db_alias = connection_manager.get_django_db_alias(engine_id) call_options = copy(options) call_options['database'] = db_alias call_command('migrate', **call_options) for ds in StaticDataSourceConfiguration.by_domain(DASHBOARD_DOMAIN): if engine_id == ds.engine_id or engine_id in ds.mirrored_engine_ids: adapter = IndicatorSqlAdapter(ds, engine_id=engine_id) adapter.build_table()
def db_for_read_write(model, write=True): """ :param model: Django model being queried :param write: Default to True since the DB for writes can also handle reads :return: Django DB alias to use for query """ app_label = model._meta.app_label if app_label == WAREHOUSE_APP: return settings.WAREHOUSE_DATABASE_ALIAS elif app_label == SYNCLOGS_APP: return settings.SYNCLOGS_SQL_DB_ALIAS elif app_label == ICDS_REPORTS_APP: engine_id = ICDS_UCR_ENGINE_ID if not write: engine_id = connection_manager.get_load_balanced_read_db_alias(ICDS_UCR_ENGINE_ID) return connection_manager.get_django_db_alias(engine_id) elif app_label == AAA_APP: engine_id = AAA_DB_ENGINE_ID if not write: engine_id = connection_manager.get_load_balanced_read_db_alias(AAA_DB_ENGINE_ID) return connection_manager.get_django_db_alias(engine_id) if not settings.USE_PARTITIONED_DATABASE: return 'default' if app_label == BLOB_DB_APP: if hasattr(model, 'partition_attr'): return partition_config.get_proxy_db() return 'default' if app_label == FORM_PROCESSOR_APP: return partition_config.get_proxy_db() else: default_db = partition_config.get_main_db() if not write: return connection_manager.get_load_balanced_read_db_alias(app_label, default_db) return default_db
def compute_awws_in_vhnd_timeframe(domain): """ This computes awws with vhsnd_date_past_month less than 37 days. Result is cached in local memory, so that indvidual reminder tasks per AWW/LS dont hit the database each time """ table = get_table_name(domain, 'static-vhnd_form') query = """ SELECT DISTINCT awc_id FROM "{table}" WHERE vhsnd_date_past_month > %(37_days_ago)s """.format(table=table) cutoff = datetime.now(tz=pytz.timezone('Asia/Kolkata')).date() query_params = {"37_days_ago": cutoff - timedelta(days=37)} datasource_id = StaticDataSourceConfiguration.get_doc_id(domain, 'static-vhnd_form') data_source = StaticDataSourceConfiguration.by_id(datasource_id) django_db = connection_manager.get_django_db_alias(data_source.engine_id) with connections[django_db].cursor() as cursor: cursor.execute(query, query_params) return {row[0] for row in cursor.fetchall()}
def db_for_read_write(model, write=True): """ :param model: Django model being queried :param write: Default to True since the DB for writes can also handle reads :return: Django DB alias to use for query """ if not settings.USE_PARTITIONED_DATABASE: return 'default' app_label = model._meta.app_label if app_label == FORM_PROCESSOR_APP: return partition_config.get_proxy_db() elif app_label == WAREHOUSE_APP: error_msg = 'Cannot read/write to warehouse db without warehouse database defined' assert hasattr(settings, "WAREHOUSE_DATABASE_ALIAS"), error_msg return settings.WAREHOUSE_DATABASE_ALIAS elif app_label == ICDS_MODEL: engine_id = ICDS_UCR_ENGINE_ID if not write: engine_id = connection_manager.get_load_balanced_read_engine_id( ICDS_UCR_ENGINE_ID) return connection_manager.get_django_db_alias(engine_id) else: return partition_config.get_main_db()
def _get_count(config): table_name = get_table_name(config.domain, config.table_id) db_name = connection_manager.get_django_db_alias(config.engine_id) query = ('SELECT * FROM "%s"' % table_name, []) return estimate_row_count(query, db_name)