aboutsummaryrefslogtreecommitdiff
path: root/uploader/species/models.py
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2024-09-03 10:25:25 -0500
committerFrederick Muriuki Muriithi2024-09-03 10:25:25 -0500
commitf181dbf3adf8578d2a69ca31a6d8aece6f6d8ffd (patch)
treed4f4472ac2e56b60aaefa85c1eacacb6375e577f /uploader/species/models.py
parent9b3e7b0203f582d4193def2d24a9c77683bc8456 (diff)
downloadgn-uploader-f181dbf3adf8578d2a69ca31a6d8aece6f6d8ffd.tar.gz
Save a species to the database.
Diffstat (limited to 'uploader/species/models.py')
-rw-r--r--uploader/species/models.py42
1 files changed, 42 insertions, 0 deletions
diff --git a/uploader/species/models.py b/uploader/species/models.py
index 98337a3..bde38ce 100644
--- a/uploader/species/models.py
+++ b/uploader/species/models.py
@@ -1,4 +1,6 @@
"""Database functions for species."""
+from typing import Optional
+
import MySQLdb as mdb
from MySQLdb.cursors import DictCursor
@@ -20,3 +22,43 @@ def species_by_id(conn: mdb.Connection, speciesid) -> dict:
"FullName FROM Species WHERE SpeciesId=%s",
(speciesid,))
return cursor.fetchone()
+
+
+def save_species(conn: mdb.Connection,
+ common_name: str,
+ scientific_name: str,
+ taxon_id: Optional[str] = None) -> int:
+ """
+ Save a new species to the database.
+
+ Parameters
+ ----------
+ conn: A connection to the MariaDB database.
+ taxon_id: The taxonomy identifier for the new species.
+ common_name: The species' common name.
+ scientific_name; The species' scientific name.
+ """
+ genus, species = scientific_name.split(" ")
+ species = {
+ "common_name": common_name,
+ "common_name_lower": common_name.lower(),
+ "menu_name": f"{common_name} ({genus[0]}. {species.lower()})",
+ "scientific_name": scientific_name,
+ "taxon_id": taxon_id
+ }
+ with conn.cursor() as cursor:
+ cursor.execute(
+ "INSERT INTO Species("
+ "SpeciesName, Name, MenuName, FullName, TaxonomyId"
+ ") VALUES ("
+ "%(common_name)s, %(common_name_lower)s, %(menu_name)s, "
+ "%(scientific_name)s, %(taxon_id)s"
+ ")",
+ species)
+ species_id = cursor.lastrowid
+ cursor.execute("UPDATE Species SET SpeciesId=%s WHERE Id=%s",
+ (species_id, species_id))
+ return {
+ **species,
+ "species_id": species_id
+ }