def add_records(self, records): """ Recursively add records to database """ roots = [] nodes = defaultdict(list) seen = set() for record in records: parents = record.pop("parents") record = utils.tidy_nans(record) node = self.table(**record) seen.add(node.name) if len(parents) == 0: roots.append(node) else: for parent in parents: nodes[parent].append(node) for n in nodes.keys(): assert (n in seen), f"{n} not in nodes" def recurse(node, memo): for child in memo[node.name]: node.children.append(recurse(child, memo)) return node trees = [recurse(p, nodes) for p in roots] with self.get_session() as session: session.add_all(trees) return
def add_records(self, records): """ Recursively add records to database """ logger.info("Processing taxon file.") root = None nodes = defaultdict(list) for record in records: record = utils.tidy_nans(record) node = self.table(**record) if node.taxid == 1: root = node else: nodes[node.parent_taxid].append(node) logger.info("Constructing tree.") def recurse(node, memo): for child in memo[node.taxid]: node.children.append(recurse(child, memo)) return node tree = recurse(root, nodes) logger.info("Adding to database.") with self.get_session() as session: session.add(tree) return
def add_records(self, records): """ Recursively add records to database """ logger.info("Processing taxon file.") roots = [] nodes = defaultdict(list) for record in records: parents = record.pop("parents") record = utils.tidy_nans(record) node = self.table(**record) if pd.isna(parents) or len(parents) == 0: roots.append(node) else: for parent in parents: nodes[parent].append(node) def recurse(node, memo): for child in memo[node.id]: node.children.append(recurse(child, memo)) return node tree = [recurse(root, nodes) for root in roots] with self.get_session() as session: session.add_all(tree) return
def add_table(self, table): records = [] for i, loc in table.iterrows(): this_loc = self._from_series(loc) this_loc = utils.tidy_nans(this_loc) records.append(this_loc) self.add_records(records) return
def add_records(self, records): """ Recursively add records to database """ with self.get_session() as session: for record in records: record = utils.tidy_nans(record) sample_id = record.pop("sample_id") contributor_name = record.pop("contributor_name") sample = session.query( db.Sample).filter(db.Sample.id == sample_id).one() contributor = session.query(db.Contributor).filter( db.Contributor.name == contributor_name).one() record["contributor"] = contributor record["sample"] = sample record = self.table(**record) session.add(record) return
def add_records(self, records): """ Recursively add records to database """ with self.get_session() as session: for record in records: taxid = record.pop("taxid") sample_id = record.pop("sample_id") record = utils.tidy_nans(record) sample = session.query( db.Sample).filter(db.Sample.id == sample_id).one() taxon = session.query( db.Taxon).filter(db.Taxon.taxid == taxid).one() record["taxon"] = taxon record["sample"] = sample record = self.table(**record) session.add(record) return
def add_records(self, records): """ Recursively add records to database """ with self.get_session() as session: for record in records: record = utils.tidy_nans(record) pesticide_name = record.pop("pesticide_name") sample_id = record.pop("sample_id") print(pesticide_name, sample_id) sample = session.query(db.Sample).filter( db.Sample.id == sample_id).one() pesticide = session.query(db.Pesticide).filter( db.Pesticide.name == pesticide_name).one() record["pesticide"] = pesticide record["sample"] = sample record = self.table(**record) session.add(record) return