mirror of
https://github.com/Haiti-Distributed-Healthcare-System/hdhs.git
synced 2026-10-27 01:45:59 +00:00
ENH: finished logic for parsing database
This commit is contained in:
1 parent
c58f56ec40
commit
0b079bfdf4
4 files changed
+35
-63
No files matched your search
@@ -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")
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Author: "hertz"
|
||||
# Date: 20200310
|
||||
|
||||
# args:
|
||||
# 1 --
|
||||
# 2 --
|
||||
|
||||
#if [[ $# -ne 1 ]]; then
|
||||
# echo "Usage: $0 <param-1> <param-2> ..."
|
||||
# exit
|
||||
#fi
|
||||
|
||||
|
||||
# script:
|
||||
|
||||
|
||||
@@ -1,17 +0,0 @@
|
||||
#!/usr/bin/env bash
|
||||
# Author: "hertz"
|
||||
# Date: 20200310
|
||||
|
||||
# args:
|
||||
# 1 --
|
||||
# 2 --
|
||||
|
||||
#if [[ $# -ne 1 ]]; then
|
||||
# echo "Usage: $0 <param-1> <param-2> ..."
|
||||
# exit
|
||||
#fi
|
||||
|
||||
|
||||
# script:
|
||||
|
||||
|
||||
Reference in new issue
Block a user