diff options
-rw-r--r-- | scripts/load_phenotypes_to_db.py | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/scripts/load_phenotypes_to_db.py b/scripts/load_phenotypes_to_db.py index 2be8096..9d8b82f 100644 --- a/scripts/load_phenotypes_to_db.py +++ b/scripts/load_phenotypes_to_db.py @@ -209,9 +209,20 @@ def save_phenotype_n( def cross_reference_phenotypes_publications_and_data( - conn: mysqldb.Connection, xref_data: tuple[dict, ...]): + conn: mysqldb.Connection, xref_data: tuple[dict, ...] +): """Crossreference the phenotypes, publication and data.""" - pass + with conn.cursor(cursorclass=DictCursor) as cursor: + cursor.execute("SELECT MAX(Id) CurrentMaxId FROM PublishXRef") + _nextid = int(cursor.fetchone()["CurrentMaxId"]) + 1 + cursor.execute( + ("INSERT INTO PublishXRef(Id, InbredSetId, PhenotypeId, PublicationId, DataId) " + "VALUES(%(xref_id)s, %(population_id)s, %(phenotype_id)s, %(data_id)s) " + "RETURNING *"), + tuple({**row, "xref_id": _id} + for _id, row in enumerate(xref_data, start=_next_id))) + return tuple(dict(row) for row in cursor.fetchall()) + return tuple() def update_auth(user, species, population, dataset, phenos): @@ -236,6 +247,7 @@ def load_data(conn, job): _phenos = save_phenotypes(cursor, _control_data) dataidmap = { row["phenotype_id"]: { + "population_id": population["Id"], "phenotype_id": row["phenotype_id"], "data_id": dataid, "publication_id": _publication["Id"], @@ -251,7 +263,7 @@ def load_data(conn, job): data = save_pheno_data(conn, dataidmap, samples, _control_data) # 4. Cross-reference Phenotype, Publication, and PublishData in PublishXRef xrefs = cross_reference_phenotypes_publications_and_data( - cursor, __merge_map_with_publications__(dataidmap)) + conn, tuple(dataidmap.values())) # 5. If standard errors and N exist, save them too # (use IDs returned in `3. b.` above). data_se = save_phenotypes_se(conn, dataidmap, samples, _control_data) |