我正在尝试使用 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/