Как получить имя столбца из БД - PullRequest
0 голосов
/ 16 января 2020

Я пытаюсь выполнить имена столбцов из базы данных MySQL, используя Flask. Для этого я создал пользовательский интерфейс, пользователь должен ввести свое имя пользователя и пароль, а также такие данные, как порт, имя базы данных и т. Д. c. Соединение с базой данных успешно установлено.

  • Мне нужно получить имя столбца из базы данных

Мой курсор. Выполнение ниже

cursor.execute("select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME= '%s'" %(i))

Мой вывод

{'Employee': ['COLUMN_NAME'], 'Department': ['COLUMN_NAME']}

Ожидаемый выход

| COLUMN_NAME  |
+--------------+
| emp_no       |
| emp_name     |
| age          |

пока я выполняю вручную, с mysql select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME='employee'; я получил правильный

Использование python версия 3

@app.route('/connections',methods = ['POST', 'GET'])
def db_connections():
    if request.method == 'POST':
        dbtype = request.form.get('dbtype');
        dbuser = request.form.get('dbuser');
        dbpw = request.form.get('dbpw');
        hname = request.form.get('hname');
        hport = request.form.get('hport');
        dbname = request.form.get('dbname');
        if(dbtype == "MYSQL"):
            try:
                connection = mysql.connector.connect(user = dbuser,
                                  password = dbpw,
                                  host = hname,
                                  port = hport,
                                  database = dbname)
                cursor = connection.cursor(buffered=True)
            except (Exception) as error :
                print ("Error while connecting to SQL", error)
        def get_table_col_names(table_str):
            for i in table_str:
                    cursor.execute("select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME= '%s'" %(i))
                    col_names = []
                    for desc in cursor.description:
                        col_names.append(desc[0])        
                        all_databaselists[i] = col_names               
            return all_databaselists 
        cursor.execute("SELECT table_name FROM information_schema.tables WHERE table_type = 'base table' AND table_schema='test'")
        records = cursor.fetchall() 
        print (records)
        result = [i[0] for i in records]     
        all_columns = get_table_col_names(result)
        print (all_columns)
        cursor.close()           
   return render_template('connections.html')

1 Ответ

1 голос
/ 16 января 2020

Проблема заключалась в том, что вы смотрели описания из курсора, а не смотрели результаты, полученные из запроса, который вы выполнили. Код, который я прикрепил ниже, должен работать для вас - он возвращает словарь имен таблиц с именами связанных столбцов в виде списков.

def get_table_col_names(table_str):
    all_databaselists = {}
    for i in table_str:
        cursor.execute(
            "select COLUMN_NAME from INFORMATION_SCHEMA.COLUMNS where TABLE_NAME= '%s'" % (i))
        tableDesc = cursor.fetchall()
        col_names = []
        for desc in tableDesc:
            col_names.append(desc[0])
            all_databaselists[i] = col_names
    return all_databaselists

cursor.execute("SELECT table_name FROM information_schema.tables WHERE table_type = 'BASE TABLE' AND table_schema='test'")
records = cursor.fetchall() 
result = [i[0] for i in records]     
all_columns = get_table_col_names(result)
print (all_columns)
cursor.close()           

Примечание: Я изменил 'base table' на 'BASE TABLE' как это то, как строка для table_type была представлена ​​в моей базе данных.

Протестировано:

Я создал следующую таблицу:

mysql> describe employee;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| emp_no   | int         | YES  |     | NULL    |       |
| emp_name | varchar(50) | YES  |     | NULL    |       |
| age      | int         | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
3 rows in set (0.00 sec)

Сценарий, приведенный выше, дает следующий вывод:

{'employee': ['age', 'emp_name', 'emp_no']}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...