python - 如何从数据库中检索列名

标签 python mysql flask

我正在尝试使用 Flask 从 MySQL 数据库执行列名。我为此创建了 UI,用户必须输入用户名和密码以及端口、数据库名称等数据。与数据库的连接已成功建立。

  • 我需要从数据库中检索列名

我的cursor.execute在下面

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')

最佳答案

问题在于您正在查看游标中的描述,而不是查看执行的查询返回的结果。我在下面附加的代码应该适合您 - 它返回一个表名字典,并将关联的列名作为列表。

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']}

关于python - 如何从数据库中检索列名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59769119/

相关文章:

python - 有哪些方法可以为 Flask 应用做种?

MySQL计算列中的值,更新和替换有限制的值

python - Flask 配置文件不起作用

python - 在 Flask-SQLAlchemy 中添加 __init__() 方法

python - Bokeh - 如何从 EventHandler 函数返回对象

python - 仅屏蔽 numpy 中特定范围的索引

python - 将 confluent-kafka python 库与 AWS lambda 一起使用时出错

python - 来回传递变量与使用 python 常量

mysql - 如何创建超过 8 个表和特殊条件的多选

mysql - 如果类别为空,SQL删除类别