def update_row(table_id, instance): """ This generates on query per updated row """ fusion_table = FusionTable(table_id) instance_content_type = ContentType.objects.get_for_model(instance) rows = [] row_id = get_fusion_table_row_id_for_instance(instance_content_type, instance) if row_id is not None: fusion_table_fields = build_fields_for_row(instance) rows.append(Row(row_id=row_id, fields=fusion_table_fields)) fusion_table.update(rows)
def delete_row(table_id, instance): """ This creates one query per delete so could potentially be very slow. If you need to delete rows in batches it would be better to add a method to the pyft library following the pattern for insert() batches """ fusion_table = FusionTable(table_id) table_content_type = ContentType.objects.get_for_model(instance) row_id = get_fusion_table_row_id_for_instance(table_content_type, instance) if row_id is not None: query = SQL().delete(table_id, row_id) fusion_table.run_query(query) FusionTableRowId.objects\ .get(content_type = table_content_type, object_id = instance.pk)\ .delete()
def setUp(self): self.schema = {'letters': StringField.column_type, 'numbers':NumberField.column_type} self.table_name = current_app.settings['TEST_TABLE_PREFIX'] + "PYFTUsage" self.ft = FusionTable.create(self.schema, self.table_name) self.simple_data = [(-1, 'minus1'),(-2,'minus2'),(-3,'minus3')] self.dummy_data = [(n,l) for n,l in zip(*self.build_ran_data())]
def create_fusion_table(instance): fusion_table_name = "%s - %s" %(instance.django_model.app_label, instance.django_model.name) schema = get_schema_from_model(instance.django_model.model_class()) column_types = get_column_types_from_schema(schema) fusion_table = FusionTable.create(column_types, fusion_table_name) initialise_fusion_table(fusion_table, instance.django_model.model_class()) return fusion_table
def insert_rows(table_id, instances, fusion_table=None): """ Insert rows in a batch """ if fusion_table is None: fusion_table = FusionTable(table_id) rows = [] for instance in instances: fusion_table_fields = build_fields_for_row(instance) rows.append(Row(row_id=None, fields=fusion_table_fields)) row_ids = fusion_table.insert(rows) instance_content_type = ContentType.objects.get_for_model(instances[0]) for row_id, instance in zip(row_ids, instances): fusion_table_row_id = FusionTableRowId(content_type = instance_content_type, object_id = instance.pk, row_id = row_id) fusion_table_row_id.save()