Как получить тип данных со столбцом и создать словарь - PullRequest
2 голосов
/ 19 июня 2020

Mysql таблица имеет student имеет 2 таблицы students и teach

Код ниже

def tbl_col_names(table):
    db = {}
    for i in table:
        cursor.execute("select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME= '%s'" % (i))
        tabledescription = cursor.fetchall()
        print ('tableDesc1', tabledescription)
        tableDescription1 = [i[0] for i in tabledescription]
        print (tableDescription1)
        db[i] = tableDescription1
        with open('data.json','w') as f:
            db1 = json.dumps(db)
            test = (f"data ='[{db1}]'")
            f.write(test)
    return db
cursor.execute("SELECT table_name FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND table_schema='databasename'")
ecords = cursor.fetchall()
print (records)
member = [i[0] for i in records]
print ('member',member)
allcolumnvalues = tbl_col_names(member)
print ('all',allcolumnvalues )

данные. json вывод ниже

data = '[{"students": ["student_no"], "teach": ["last_name", "course_no"]}]'

Как получить тип данных вместе с именем столбца

Ниже приведен запрос mysql для получения имени столбца вместе с типом данных

select COLUMN_NAME,DATA_TYPE from INFORMATION_SCHEMA.COLUMNS where table_name='student';
cursor.execute("select COLUMN_NAME,DATA_TYPE  from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME= '%s'" % (i))

My ожидаемый выход data.json ниже

data = '[{"students": {"student_no":"int"}, "teach": {"last_name":"varchar", "course_no":"int"}}]'

1 Ответ

4 голосов
/ 23 августа 2020
cursor.execute('show columns from databasename.students')
records = cursor.fetchall()
d = {record[0]: record[1] for record in records}
# or d = {record['Field']: record['Type'] for record in records} if the cursor.execute returns a dictionary

Будет возвращено подробное описание каждого типа поля, включая точность, например int(11) или varchar(32). Если вы не хотите, чтобы точность включалась, то:

d = {record[0]: record[1].split('(')[0] for record in records}

Для каждой интересующей вас базы данных / таблицы вы должны добавить словарь, вычисленный, как в приведенном выше примере, в список, чтобы получить желаемые результаты:

def get_table_attributes(cursor, database, table):
    cursor.execute(f'show columns from {database}.{table}')
    records = cursor.fetchall()
    return {record[0]: record[1] for record in records}
    # return {record[0]: record[1].split('(')[0] for record in records}

data = []
data.append({'students': get_table_attributes(cursor, 'databasename', 'students')})
data.append({'teach': get_table_attributes(cursor, 'databasename', 'teach')})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...