用 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):\n%s\n' % (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):\n%s\n' % (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):\n%s\n' % (len(dbList), pprint.pformat(dbList, indent=4)))
     
    for dbName in dbList:
        if dbName in IgnoreDB:
            continue
        ProcOneDB(dbName)                                          
                                         
if __name__ == '__main__':
    ProcAllDB()

*** walker ***

原文地址:http://blog.51cto.com/walkerqt/2150530

时间: 2024-10-10 01:21:49

用 pymysql 打印 MySQL/MariaDB 的所有库名、表名和字段名的相关文章

MySQL 之 第二章: 库与表的基本操作; 数据类型; 完整性约束; 外键;

库与表的基本操作 数据类型 完整性约束 外键 库与表的基本操作 库的增删改查: 查看系统库语句: show databases; information_schema: 虚拟库,不占用磁盘空间,存储的是数据库启动后的一些参数,如用户表信息.列信息.权限信息.字符信息等performance_schema: MySQL 5.5开始新增一个数据库:主要用于收集数据库服务器性能参数,记录处理查询请求时发生的各种事件.锁等现象mysql: 授权库,主要存储系统用户的权限信息 sys: 创建数据库语法:

mysql语句1-创建库和表

一.DDL数据定义语言 就是对书库内部的对象进行创建.删除.修改等操作的语言. 关键字:create  drop  alter 1.连接数据库 mysql -u用户名 -p -h指定主机(不指定默认是本机) 2. 创建数据库: mysql> create database test1; Query OK, 1 row affected (0.00 sec)  删除库 mysql> drop datbases test1; (0.00 sec):这个表示操作执行的时间. 3.查询数据库 mysq

(笔记)Mysql实例:建库建表并插入数据1

drop database if exists school;  // 如果存在school则删除create database school;  // 建立库schooluse school;  // 打开库SCHOOLcreate table teacher(  // 建立表TEACHER    id int(3) auto_increment not null primary key,    name char(10) not null,    address varchar(50) de

MySQL 同一实例不同库之间表同步(Otter 应用)

1 需求 在同一台服务器同一MySQL实例中的source库和target库都存在student表.如果source库中该表发生增删改操作时,也需要体现到target库的student表中: 2 解决方案 2.1 方案一:使用Shell脚本实现 由于自己缺少使用Shell编程的经验,此路暂时不通: shell脚本实现Mysql主从数据库 2.2 方案二:DataX 官方介绍: DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具/平台,实现包括 MySQL.Oracle.SqlServer.

(笔记)Mysql实例:建库建表并插入数据2

drop database if exists school;  // 如果存在SCHOOL则删除create database school;  // 建立库SCHOOLuse school;  // 打开库SCHOOLcreate table teacher(  // 建立表TEACHER    id int(3) auto_increment not null primary key,    name char(10) not null,    address varchar(50) de

MySQL之二:库、储存引擎、表操作

一.库操作 1.数据库命名规则: 可以由字母.数字.下划线.@.#.$ 区分大小写 唯一性 不能使用关键字如 create select 不能单独使用数字 最长128位 2.数据库相关操作 #创建数据库 create database 数据库名 charset utf8; #查看数据库 show databases; show create database db1; select database(); #查看当前所在数据库 #选择数据库 use 数据库名 #删除数据库 drop databa

第八章|MySQL数据库|库操作|表操作

1.初识数据库 我们在编写任何程序之前,都需要事先写好基于网络操作一台主机上文件的程序(socket服务端与客户端程序),于是有人将此类程序写成一个 专门的处理软件,这就是mysql等数据库管理软件的由来,但mysql解决的不仅仅是数据共享的问题,还有查询效率,安全性等一系列问题, 总之,把程序员从数据管理中解脱出来,专注于自己的程序逻辑的编写. 数据(Data):描述事物的符号记录称为数据,描述事物的符号既可以是数字,也可以是文字.图片,图像.声音.语言等,数据由多种表现形式,它们都可以经过数

MySQL用户、库、表操作

用户及权限操作: 管理员登录:mysql -uroot -p 用户设置密码:set password=password(密码); 查看数据库所有用户:select * from mysql.user; 查看用户权限:show grants for 用户名@网络地址 [identified by 密码] 普通用户登录:mysql -u用户名 -h网络地址 -p 查看当前用户:select user(); 查看当前数据库:select database(); 当前时间:now() 查看当前数据库是否

Mysql根据一个基库生成其他库与其不同的库升级脚本

今天研究了一下不同数据库之间如何做同步.弄了一个升级工具类,希望以后还能有所帮助. public class UpgradeDataBase { public static void main(String[] args) { //两个不同数据库名称 List<String> sqls = UpgradeDataBaseToStandardDataBase("database1", "database2"); for(String sql : sqls)