ENH: finished logic for parsing database

This commit is contained in:
abpwrs committed 2020-04-08 18:22:27 -05:00
1 parent c58f56ec40
commit 0b079bfdf4
4 files changed
+35 -63

No files matched your search

-15
View File
@@ -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")
+35 -14
View File
@@ -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
-17
View File
@@ -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:
-17
View File
@@ -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: