用 pymysql 打印 MySQL/MariaDB 的所有库名表名和字段名

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用 pymysql 打印 MySQL/MariaDB 的所有库名表名和字段名相关的知识,希望对你有一定的参考价值。

【环境】

  • Python 版本:3.6.5 (v3.6.5:f59c0932b4, Mar 28 2018, 17:00:18) [MSC v.1900 64 bit (AMD64)]

  • PyMySQL 版本:0.8.1


【代码】

#encoding: utf-8
#author: walker
#date: 2018-07-26
#summary: 打印 mysql/MariaDB 里面的所有库名、表名和字段名

import pymysql
import pprint
 
DBHost = r'127.0.0.1'
DBPort = 3306
DBUser = 'root'
DBPwd = 'password'

# 忽略掉系统库
IgnoreDB = {'information_schema', 'mysql', 'performance_schema', 'sys'}    
 
# 处理一个数据库
def ProcOneDB(dbName):
    print('************ use %s ************' % dbName)
    connDB = pymysql.connect(host=DBHost,
                                port=DBPort,
                                user=DBUser,
                                passwd=DBPwd,
                                db=dbName,
                                charset='utf8mb4')
    cur = connDB.cursor()
     
    sql = 'show tables;'
    cur.execute(sql)
    rowList = cur.fetchall()
    tableList = list()
    for row in rowList:
        tableList.append(row[0])
    print('tableList(%d):
%s
' % (len(tableList), pprint.pformat(tableList, indent=4)))
     
    # 处理每个表
    for tabName in tableList:
        print('table %s ...' % tabName)
        sql = "select column_name from information_schema.columns where table_schema='%s' and table_name='%s';"
        sql = sql % (dbName, tabName)
        cur.execute(sql)
        rowList = cur.fetchall()
        fieldList = list()
        for row in rowList:
            fieldList.append(row[0])
        print('fieldList(%d):
%s
' % (len(fieldList), pprint.pformat(fieldList, indent=4)))
     
    cur.close()
    connDB.close() 
 
# 处理所有数据库
def ProcAllDB():
    connDB = pymysql.connect(host=DBHost,
                                port=DBPort,
                                user=DBUser,
                                passwd=DBPwd,
                                charset='utf8mb4')
                                 
    cur = connDB.cursor()
         
    sql = "show databases;" 
    print('input sql:' + sql)
    cur.execute(sql)
    rowList = cur.fetchall()
    cur.close()
    connDB.close()
     
    dbList = list()
    for row in rowList:
        dbList.append(row[0])
    print('dbList(%d):
%s
' % (len(dbList), pprint.pformat(dbList, indent=4)))
     
    for dbName in dbList:
        if dbName in IgnoreDB:
            continue
        ProcOneDB(dbName)                                          
                                         
if __name__ == '__main__':
    ProcAllDB()


*** walker ***


以上是关于用 pymysql 打印 MySQL/MariaDB 的所有库名表名和字段名的主要内容,如果未能解决你的问题,请参考以下文章

PyMySQL 返回旧/快照值/不重新运行查询?

XAMPP 和 PyMySQL 未正确集成

python之pymysql模块学习(待完善...)

用pymysql代替MySQLdb

python 用pip安装pymysql(win7下)

(数据科学学习手札51)用pymysql来操控MySQL数据库