68 lines
1.9 KiB
Python
68 lines
1.9 KiB
Python
"""
|
|
Prints the database kontor structure
|
|
"""
|
|
import mariadb
|
|
from argparse import ArgumentParser, ArgumentDefaultsHelpFormatter
|
|
from setup import get_database_cursors, get_logger
|
|
|
|
parser = ArgumentParser(formatter_class=ArgumentDefaultsHelpFormatter)
|
|
parser.add_argument('--verbose', '-v', action='count', default=0)
|
|
args = parser.parse_args()
|
|
|
|
|
|
def show_tables(cur, log):
|
|
"""
|
|
Retrieves the list of tables from the database
|
|
:param cur:
|
|
:param log:
|
|
:return:
|
|
"""
|
|
log.info('get list of tables')
|
|
table_list = []
|
|
cur.execute("SHOW TABLES")
|
|
for (tablename,) in cur.fetchall():
|
|
table_list.append(tablename)
|
|
return table_list
|
|
|
|
|
|
def get_field_info(cur):
|
|
"""
|
|
Retrieves the field info associated with a cursor
|
|
:param cur:
|
|
:return:
|
|
"""
|
|
field_info = mariadb.fieldinfo()
|
|
field_info_text_list = []
|
|
for column in cur.description:
|
|
column_name = column[0]
|
|
column_type = field_info.type(column)
|
|
column_flags = field_info.flag(column)
|
|
field_info_text_list.append(f"{column_name}: {column_type} {column_flags}")
|
|
return field_info_text_list
|
|
|
|
|
|
def get_table_field_info(cur, tablename):
|
|
"""
|
|
Retrieves the field info associated with a table
|
|
:param cur:
|
|
:param tablename:
|
|
:return:
|
|
"""
|
|
cur.execute(f"SELECT * FROM {tablename} LIMIT 1")
|
|
field_info = get_field_info(cur)
|
|
return field_info
|
|
|
|
|
|
if __name__ == '__main__':
|
|
logger = get_logger(args.verbose)
|
|
logger.info("kontor.db_structure started")
|
|
_, mariadb_conn = get_database_cursors(logger)
|
|
tables = show_tables(mariadb_conn.cursor(), logger)
|
|
for table in tables:
|
|
field_info_text = get_table_field_info(mariadb_conn.cursor(), table)
|
|
print(f"Columns in table {table}:")
|
|
print("\n".join(field_info_text))
|
|
print("\n")
|
|
mariadb_conn.close()
|
|
logger.info("kontor.db_structure finished")
|