python .db 查看表信息_python 获取mysql 库信息/表信息/表结构/索引

核心代码

import pymysql

class SQLgo(object):

def __init__(self, ip=None, user=None, password=None, db=None, port=None):

self.ip = ip

self.user = user

self.password = password

self.db = db

self.port = int(port)

self.con = object

@staticmethod

def addDic(theIndex, word, value):

theIndex.setdefault(word, []).append(value)

def __enter__(self):

self.con = pymysql.connect(

host=self.ip,

user=self.user,

passwd=self.password,

db=self.db,

charset=‘utf8mb4‘,

port=self.port

)

return self

def __exit__(self, exc_type, exc_val, exc_tb):

self.con.close()

def search(self, sql=None):

data_dict = []

id = 0

with self.con.cursor(cursor=pymysql.cursors.DictCursor) as cursor:

sqllist = sql

cursor.execute(sqllist)

result = cursor.fetchall()

for field in cursor.description:

if id == 0:

data_dict.append({‘title‘: field[0], "key": field[0], "fixed": "left", "width": 150})

id += 1

else:

data_dict.append({‘title‘: field[0], "key": field[0], "width": 200})

len = cursor.rowcount

return {‘data‘: result, ‘title‘: data_dict, ‘len‘: len}

def showtable(self, table_name):

with self.con.cursor() as cursor:

sqllist = ‘‘‘

select aa.COLUMN_NAME,

aa.DATA_TYPE,aa.COLUMN_COMMENT, cc.TABLE_COMMENT

from information_schema.`COLUMNS` aa LEFT JOIN

(select DISTINCT bb.TABLE_SCHEMA,bb.TABLE_NAME,bb.TABLE_COMMENT

from information_schema.`TABLES` bb ) cc

ON (aa.TABLE_SCHEMA=cc.TABLE_SCHEMA and aa.TABLE_NAME = cc.TABLE_NAME )

where aa.TABLE_SCHEMA = ‘%s‘ and aa.TABLE_NAME = ‘%s‘;

‘‘‘ % (self.db, table_name)

cursor.execute(sqllist)

result = cursor.fetchall()

td = [

{

‘Field‘: i[0],

‘Type‘: i[1],

‘Extra‘: i[2],

‘TableComment‘: i[3]

} for i in result

]

return td

def gen_alter(self, table_name):

with self.con.cursor() as cursor:

sqllist = ‘desc %s.%s;‘ % (self.db, table_name)

cursor.execute(sqllist)

result = cursor.fetchall()

td = [

{

‘Field‘: i[0],

‘Type‘: i[1],

‘Null‘: i[2],

‘Key‘: i[3],

‘Default‘: i[4]

} for i in result

]

sqllist = ‘show table status where NAME="%s";‘ % (table_name)

cursor.execute(sqllist)

result = cursor.fetchall()

tablecomment = result[0][-1]

[item.update(TableComment=tablecomment) for item in td]

sqllist = ‘show full columns from %s;‘ % (table_name)

cursor.execute(sqllist)

result = cursor.fetchall()

for item in td:

for item1 in result:

if item[‘Field‘] == item1[0]:

item[‘Extra‘] = item1[-1]

break

return td

def index(self, table_name):

with self.con.cursor() as cursor:

cursor.execute(‘show keys from %s‘ % table_name)

result = cursor.fetchall()

di = [

{

‘Non_unique‘: ‘是‘,

‘key_name‘: i[2],

‘column_name‘: i[4],

‘index_type‘: i[10]

}

if i[1] == 0

else

{

‘Non_unique‘: ‘否‘,

‘key_name‘: i[2],

‘column_name‘: i[4],

‘index_type‘: i[10]

}

for i in result

]

dic = {}

c = []

for i in di:

self.addDic(dic, i[‘key_name‘], i[‘column_name‘])

for t in dic:

"""

初始化第一个value

将value 数据变为字符串

转为字典对象数组

"""

str1 = dic[t][0]

for i in range(1, len(dic[t])):

str1 = str1 + ‘,‘ + dic[t][i]

temp = {}

for g in di:

if t == g[‘key_name‘]:

temp.setdefault(‘Non_unique‘, g[‘Non_unique‘])

temp.setdefault(‘index_type‘, g[‘index_type‘])

temp.setdefault(‘column_name‘, str1)

temp.setdefault(‘key_name‘, t)

c.append(temp)

return c

def baseItems(self, sql=None):

with self.con.cursor() as cursor:

cursor.execute(sql)

result = cursor.fetchall()

data = [c for i in result for c in i]

return data

def query_info(self, sql=None):

with self.con.cursor(cursor=pymysql.cursors.DictCursor) as cursor:

cursor.execute(sql)

result = cursor.fetchall()

return result

使用

## 获取 database

try:

with con_database.SQLgo(

ip="192.168.100.200",

user="root",

password="123456",

port="3308"

) as f:

res = f.baseItems(sql=‘show databases‘)

print(res)

except Exception as e:

print(e)

## 获取表

try:

with con_database.SQLgo(

ip="192.168.100.200",

user="root",

password="123456",

port="3308",

db="go"

) as f:

res = f.baseItems(sql=‘show tables‘)

print(res)

except Exception as e:

print(e)

try:

with con_database.SQLgo(

ip="192.168.100.200",

user="root",

password="123456",

port="3308",

db="go"

) as f:

field = f.gen_alter(table_name="go_user") # 表结构详情

idx = f.index(table_name="go_user") # 索引

print({‘idx‘: idx, ‘field‘: field})

except Exception as e:

print(e)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值