diff --git a/db/fk.py b/db/fk.py deleted file mode 100644 index f18b755..0000000 --- a/db/fk.py +++ /dev/null @@ -1,15 +0,0 @@ -query = "SELECT tc.table_schema, tc.constraint_name, tc.table_name, kcu.column_name, ccu.table_schema AS foreign_table_schema, ccu.table_name AS foreign_table_name, ccu.column_name AS foreign_column_name FROM information_schema.table_constraints AS tc JOIN information_schema.key_column_usage AS kcu ON tc.constraint_name = kcu.constraint_name AND tc.table_schema = kcu.table_schema JOIN information_schema.constraint_column_usage AS ccu ON ccu.constraint_name = tc.constraint_name AND ccu.table_schema = tc.table_schema WHERE tc.constraint_type = 'FOREIGN KEY' AND tc.table_name='patients'" -query = "SELECT * FROM INFORMATION_SCHEMA.REFERENTIAL_CONSTRAINTS WHERE CONSTRAINT_NAME='XYZ'" -query = "SELECT owner, table_name FROM all_tables" -query = "SELECT * FROM FileMaker_Fields" -# query = "EXEC sp_fkeys FileMaker_Fields" -# query = "SELECT * FROM FileMaker_Tables" - -from fmp import FMP -import pandas as pd - -fmp_model = FMP("chifmp", "hjohnson", "hjohnson") - -df = pd.read_sql(query, fmp_model.connection) -print(df) -df.to_csv("fields.csv") diff --git a/db/fmp.py b/db/fmp.py index 18add22..b5f8e83 100644 --- a/db/fmp.py +++ b/db/fmp.py @@ -44,6 +44,8 @@ class FMP(DB): "diagnoses_made", "meds", "meds_dispensed", + "geonames", + "settings" # "settings", # "globals", ] @@ -87,23 +89,42 @@ class FMP(DB): self._model[tbl] = {} col_types = [ - df.iloc[1, index].__class__.__name__ for index in range(len(df.columns)) + df.iloc[0, index].__class__.__name__ for index in range(len(df.columns)) ] - for elem in zip(df.columns, col_types): - self._model[tbl][elem[0]] = {} - self._model[tbl][elem[0]]["type"] = elem[1] - # get table - # convert to singular - # - # check_str = f"pk_{}_id" - # self._model[tbl][elem[0]]["pk"] = "pk" == elem[0][:2] - # self._model[tbl][elem[0]]["fk"] = "fk" == elem[0][:2] - # foreign key true --> what it points to + smallest_pk_edit_distance = 123456789 + previous_pk_field = None + for field_name, field_type in zip(df.columns, col_types): + self._model[tbl][field_name] = {} + self._model[tbl][field_name]["type"] = field_type - primary_key_field_name = "" - for field_name in self._model[tbl].keys(): - self._model[tbl][field_name]["fk"] = "fk" == field_name[:2] + # extract primary keys + if field_name[:3] == "pk_": + # possible primary key + distance = edit_distance(field_name[3:-3], tbl) + if distance < smallest_pk_edit_distance: + # closest primary key so far + if previous_pk_field is not None: + # remove previously assumed pk + self._model[tbl][previous_pk_field]["pk"] = False + + # set current pk + self._model[tbl][field_name]["pk"] = True + previous_pk_field = field_name + smallest_pk_edit_distance = distance + else: + self._model[tbl][field_name]["pk"] = False + else: + self._model[tbl][field_name]["pk"] = False + + # extract foreign keys + if field_name[:3] == "fk_": + self._model[tbl][field_name]["fk"] = True + self._model[tbl][field_name][ + "fk_table" + ] = self.get_tablename_from_fieldname(field_name) + else: + self._model[tbl][field_name]["fk"] = False return self._model diff --git a/db/init-db.bash b/db/init-db.bash deleted file mode 100755 index 225d2f5..0000000 --- a/db/init-db.bash +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash -# Author: "hertz" -# Date: 20200310 - -# args: -# 1 -- -# 2 -- - -#if [[ $# -ne 1 ]]; then -# echo "Usage: $0 ..." -# exit -#fi - - -# script: - - diff --git a/db/seed-db.bash b/db/seed-db.bash deleted file mode 100755 index 225d2f5..0000000 --- a/db/seed-db.bash +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash -# Author: "hertz" -# Date: 20200310 - -# args: -# 1 -- -# 2 -- - -#if [[ $# -ne 1 ]]; then -# echo "Usage: $0 ..." -# exit -#fi - - -# script: - -