精品欧美一区二区三区在线观看 _久久久久国色av免费观看性色_国产精品久久在线观看_亚洲第一综合网站_91精品又粗又猛又爽_小泽玛利亚一区二区免费_91亚洲精品国偷拍自产在线观看 _久久精品视频在线播放_美女精品久久久_欧美日韩国产成人在线

用Python寫個工具,同時應付10個客服MM!

開發 開發工具
我們的操作是,通過navicat連接十多臺機器的庫,然后連接數據庫-輸入sql-修改查詢條件(如一長串的日期)進行各種查詢。

公司主營短信,工作中數據庫查詢占了很大比例。

我們的操作是,通過navicat連接十多臺機器的庫,然后連接數據庫-輸入sql-修改查詢條件(如一長串的日期)進行各種查詢。

遇上高峰期,客服頻頻轉發問題給我們,例如查下客戶為什么沒收到短信啦,查詢發送記錄啦,某個短信通道的發送量,簽名統計等等。

圖片

最讓我郁悶的地方,每次手機號、日期、短信通道等條件挨個修改一遍,鍵盤敲得噼里啪啦,鼠標點的不亦樂乎,別人還以為你有多忙,結果一頓操作猛于虎就查了條數據。

都說打工人苦打工人累。

圖片

我們就不要把工作耗費在這無意義的機械重復中了,是的,即使快一點也好。

思路

我想到總結常用的sql,寫入配置文件。

圖片

通過網頁點擊執行這些語句。

在前端,好不容易靠試錯發現,可以通過JavaScript的splice函數來對接紅框內的查詢條件:

圖片

利用splice實現搜索條件動態添加,這個用法是我蒙的,不知道專業的前端MM怎么做的。

上述內容就是我最初的想法。

雖然研發已經給客服MM做了查詢后臺,不過不適合我們這種“查詢工程師”。

手工DIY一個?

想法挺好,怎么實現呢。

這個不急,騎著毛驢看唱本——走著瞧

摸到一條魚

日月輪轉,上班閑敲棋子,忙改文字,敲敲打打的,在沒有其它技術人員支持的情況下,前后端居然調通了。

忽然間,大部分的查詢工作,我都可以通過自己的筆記本輕描淡寫的“指點江山”了:

圖片

不管多少個數據庫,多少條語句,我都可以寫到配置文件中。

前端呢,可以用element-ui的“Cascader 級聯選擇器”分門別類來添加要執行的sql

圖片

下圖紅框內就是“Cascader 級聯選擇器”效果,選中后會動態出現相關的搜索選項:

圖片

我們看下展示效果:

圖片

大體情況就是這樣。

怎么實現的,主要介紹2點:

  • 如何連接不同的數據庫
  • 如何添加一條sql查詢

文末上傳了所有源碼到gitee,有興趣的同學可以看看

如何連接不同的數據庫

1. 怎么在前端看到數據庫

如圖,怎么讓數據庫信息在下拉框中顯示呢?

圖片

首先,每個數據庫取個英文名字,寫在配置文件里,通過configparser模塊讀取

圖片

from rest_framework.views import APIView
import configparser

def read_cfg(name):
cfg = configparser.RawConfigParser()
cfg.read(settings.CONFIG_PATH, encoding='utf-8')
return cfg.items(name)

class get_dbs(APIView):
def get(self, request, *args, **kwargs):
dbs = read_cfg('db')
dbs_list = []
d = {}
for k,v in dbs:
d['label'] = k
d['value'] = v
dbs_list.append(d)
d = {}
return JsonResponse({'code': 1, 'data': dbs_list})

然后配置前端,一打開頁面就獲取數據庫信息

export default {
created() {
this.get_dbs()
},
}

async get_dbs() {
//this.$http.get('dbs'),dbs為獲取數據庫信息的接口地址
const { data: res } = await this.$http.get('dbs')
if (res.code !== 1) {
return this.$message.error('獲取dbs失敗')
}
this.operateFormLabel[0].children = res.data
},

2. 讓django處理前端傳來的數據庫信息

公司數據庫為oracle,并且經過堡壘機,所以用到cx_Oracle和sshtunnel模塊

from cx_Oracle import Connection
from sshtunnel import SSHTunnelForwarder
from rest_framework.views import APIView

class get_messages(APIView):
def post(self, request, *args, **kwargs):
data = json.loads(request.body.decode('utf-8'))
db = data['db']
#根據下拉框中選擇的數據庫名字,配置要連接的數據庫
if not db:
return JsonResponse({'code':0,'msg':"請選擇數據庫"})
if db == 'lt1':
conn = ('192.168.2.1','ms','sgate;Normal;sms')
elif db == 'lt2':
conn = ('192.168.2.6','ms2','sgate;Normal;sms2')

#sshtunnel建立客戶端與堡壘機的隧道
with SSHTunnelForwarder(
('堡壘機地址', port),
ssh_username="ssw",
ssh_password="1223456",
remote_bind_address=(conn, 1521)) as server:
conn = (conn[1], '123456', '127.0.0.1:%d/%s' % (server.local_bind_port,conn[2]))
xconn = Connection(*conn)
cursor = xconn.cursor() # 新建游標
cursor.execute(sql) # 執行sql語句
ret = cursor.fetchall()
cursor.close()
xconn.close()

這樣就可以在頁面下拉框中,自由的進行數據庫的連接啦。接下來就是如何添加sql了,請看下面的例子。

如何添加一條sql查詢

前端操作

1. 怎么在前端看到它

如圖,怎么讓這條sql在前端顯示呢?

圖片

只需一步, 在messages.vue中添加級聯菜單的一級菜單巡檢和二級菜單服務器即可

casecadeFormLabel: [
{
model: 'weekly_check',
label: '巡檢',
children: [
{
label: '服務器',
value: 'inspect'
},
]
}
],

只是顯示還不夠,每條語句要顯示的字段不一樣,我們需要單獨定義它們。

圖片

2. 單獨定義要顯示的表頭字段

如上所述,在messages.vue中添加inspect的表頭字段,并且設置this.tableLabel = this.inspectLabel。為每條sql語句設置不同的表頭字段,賦值給this.tableLabel,這樣可以讓不同的sql顯示不同的字段

inspectLabel: [
{ prop: 'ip', label: '服務器', width: 120},
{ prop: 'cpu', label: 'CPU占用率', width: 70},
{ prop: 'mem', label: '內存占用率', width: 70},
{ prop: 'disk', label: '磁盤使用情況', width: 230 },
{ prop: 'vda1', label: '/dev/vda1使用率', width: 100},
{ prop: 'vdb1', label: '/dev/vdb1使用率', width: 100},
{ prop: 'network', label: '網絡連接', width: 60},
{ prop: 'service', label: '服務檢查', width: 165 },
{ prop: 'url', label: '站點檢查', width: 165 },
{ prop: 'create_time', label: '日期', width: 70}
],

...中間略
else if (this.operateForm.sql === 'inspect') {
this.tableLabel = this.inspectLabel
}

3. 動態添加搜索條件

如圖,框內的3個搜索條件是通過JavaScript的splice函數生成的。通過它,我們可以為每條語句定義不同的搜索條件。

圖片

在commonForm.vue中編輯:

// 如果點擊的的sql是“inspect”,就在頁面上添加3個搜索條件,分別是網絡連接、服務檢查、時間范圍
export default {
data() {
return {
network: {
model: 'network',
label: '網絡連接'
},
service: {
model: 'service',
label: '服務檢查'
},
timerange: {
model: 'timerange',
label: '時段',
type: 'date'
},
}
}

methods: {
handleChange() {

if (this.selectedKeys === 'inspect') {
this.formLabel.splice(1, 1, this.network)
this.formLabel.splice(2, 1, this.service)
this.formLabel.splice(3, 1, this.timerange)
}
}
}
}

接下來是后端操作。

后端操作

1. 讀取sql

首先,sql取名為“inspect”。config.cfg-[sql] 填寫要執行的sql語句

圖片

old_views.py-read_cfg函數,get_sql函數讀取config.cfg中的sql語句,比如讀到名為“inspect”的語句,返回的結果是這樣的 ['select project,ip,cpu,mem,disk,vda1,vdb1,network,service,url,create_time\nfrom weekly_check\nwhere create_time BETWEEN {1} AND {2}']

import configparser
def read_cfg(name):
cfg = configparser.RawConfigParser()
cfg.read(settings.CONFIG_PATH, encoding='utf-8')
return cfg.items(name)

#讀取config.cfg中的sql語句,比如讀到名為“inspect”的語句,返回的結果是這樣的
#['select project,ip,cpu,mem,disk,vda1,vdb1,network,service,url,create_time\nfrom weekly_check\nwhere create_time BETWEEN {1} AND {2}']
def get_sql(sqlname):
data = read_cfg('sql')
sql = [item[1] for item in data if sqlname == item[0]]
return sql[0]

2. 對頁面提交過來的sql語句進行處理

然后,對頁面提交過來的sql語句進行處理:如修改日期,修改where條件,加上搜索條件等

old_views.py-get_messages()

if sqlname in ('inspect'):
inputLabel = []
field = []
condition = []
field_dict = {'network': network, 'service': service}
for key, value in field_dict.items():
print('len(value)',len(value))
field.append(key)
condition.append("{0} like '%{1}%' and".format(key, value))
if sqlname == 'inspect':
print('get_sql(sqlname)',get_sql(sqlname).format(','.join(field), start, end))
print('condition',condition)
sql = get_sql(sqlname).format(','.join(field), start, end).replace('where','where {0}').format(' '.join(condition))

3. 數據轉成字典

(('農林牧漁', '172.16.1.6', '2.05', '24.59', '/dev/vda1 used: 7.9G nouse: 30G', '19.75', '74.11', '異常', 'Bootlog: OK'),)

這是從數據庫返回的數據,類型為元組,需要轉成字典并給value加上key,方便前端識別。如{'項目名稱': '農林牧漁', 'ip': '172.16.1.6'}

old_views.py-foo函數,bar函數

#把參數轉成字典
def foo(**kwargs):
#對字典中的datetime時間格式數據轉為字符串
if isinstance(kwargs['create_time'],datetime.datetime):
kwargs['create_time'] = kwargs['create_time'].strftime(('%Y-%m-%d %X'))
return kwargs

#field是選取哪些字段的數據返回給前端
def bar(ret,sqlname,field=None,user_id=None):
for item in ret:
if sqlname == 'inspect':
obj = foo(project=item[0], ip=item[1], cpu=item[2],mem=item[3],disk=item[4],
vda1=item[5],
vdb1=item[6],
network=item[7],
service=item[8],
url=item[9],
create_time=item[10])
yield obj

上一步bar()函數主要作用是把從數據庫查到的數據轉成字典,并給value加上一個key,大概過程:

import datetime
ret = (('農林牧漁', '172.16.1.6', '2.05', '24.59', '/dev/vda1 used: 7.9G nouse: 30G', '19.75', '74.11', '異常', 'Bootlog: OK', '', datetime.datetime(2022, 8, 19, 16, 17, 12)),)
obj = {}
field = ['network', 'service']
for item in ret:
for i, v in enumerate(field):
obj[v] = item[i]

print(obj)
輸出為:
{'network': '農林牧漁', 'service': '172.16.1.6'}

到這里,一條sql查詢就添加完了。

責任編輯:武曉燕 來源: Python技術
相關推薦

2019-04-03 15:00:47

Python圖像編輯工具

2021-09-13 16:40:30

Java C 語言游戲

2020-06-10 07:49:56

Python代碼開發工具

2020-12-31 10:33:05

Python開發編程

2020-08-19 09:22:14

Python語言工具

2022-11-04 11:44:56

WebFluxCURDWeb

2023-10-31 08:21:18

WebFlux基本用法JPA

2020-08-19 09:25:32

Python人臉識別人工智能

2019-04-19 16:30:30

Python機器人代碼

2019-10-16 10:23:59

Python圖像處理編程語言

2024-01-15 08:16:10

Maven插件簡化

2019-10-17 21:37:28

微信飛機大戰Python

2020-07-20 10:00:52

Python翻譯工具命令行

2012-04-23 10:05:37

PHPWEB

2020-05-31 18:50:44

云計算開源安全工具

2020-12-15 09:43:20

Python可視化工具網絡應用

2020-12-22 10:12:40

Python科學機器學習

2024-11-06 11:15:59

2021-06-29 07:04:38

爬蟲代碼Python

2022-03-30 15:11:26

Python房價工具
點贊
收藏

51CTO技術棧公眾號

一区二区三区**美女毛片| 一本一本久久a久久| 天堂8中文在线| 美女网站在线免费欧美精品| 亚洲图片欧美日产| 手机免费看av网站| 国模精品视频| 亚洲国产精品v| 亚洲一区二区久久久久久| 久久久久久久国产精品毛片| 九九亚洲视频| 日韩欧美电影一区| 欧美 日韩 国产 激情| gogogogo高清视频在线| www..com久久爱| 国产精品高清在线| 欧美手机在线观看| 亚洲图区在线| 精品乱人伦小说| 夫妻免费无码v看片| av电影免费在线观看| 久久影院午夜片一区| 91在线无精精品一区二区| 日本在线免费观看| 68国产成人综合久久精品| 亚洲精品国产拍免费91在线| 狠狠操狠狠干视频| 欧美自拍电影| 亚洲国产精品久久不卡毛片| 亚洲欧美日产图| 黄色福利在线观看| 国产一区激情在线| 欧美中文字幕第一页| 妺妺窝人体色www婷婷| 久久社区一区| 亚洲精品电影在线| 制服丝袜在线第一页| jizzyou欧美16| 色狠狠一区二区三区香蕉| youjizz.com亚洲| 国产在线一二三| 久久综合色播五月| 九色91视频| 黄色美女一级片| 国产电影一区二区三区| 国产免费观看久久黄| 无码人妻熟妇av又粗又大| 黄色av成人| 精品少妇v888av| 欧美激情图片小说| 热久久天天拍国产| 中文字幕精品久久| 在线观看国产精品一区| 免费看成人吃奶视频在线| 日韩禁在线播放| 天天插天天射天天干| 青青久久av| 亚洲国产精品资源| 无码人妻精品一区二区三| 国产一区一区| 日韩欧美在线观看| 日日碰狠狠丁香久燥| 国产拍在线视频| 亚洲 欧美综合在线网络| 成人在线观看毛片| 天堂地址在线www| 亚洲视频一区在线| 亚洲精品在线观看免费| 麻豆传媒在线免费看| 亚洲丝袜自拍清纯另类| 在线一区高清| 毛片在线看网站| 国产三级精品视频| 一区二区三区四区欧美日韩| 欧美激情免费| 亚洲欧美精品午睡沙发| 亚洲国产精品无码av| av免费不卡| 91国偷自产一区二区三区观看 | 国产精选久久久| 国产成人日日夜夜| 国产私拍一区| 国产精品一区二区三区四区色| 日本一区免费视频| 亚洲欧美一二三| 久久av色综合| 色88888久久久久久影院按摩| 精品日韩久久久| 精品视频91| 日韩精品在线免费| 国产又黄又粗又猛又爽的| 欧美88av| 国产成人精品免高潮费视频| 精品一区二区无码| 国产精品中文欧美| 欧美一区二区三区在线免费观看| 337p日本欧洲亚洲大胆鲁鲁| 亚洲制服丝袜在线| 亚洲最大综合网| 风间由美性色一区二区三区四区| 亚洲欧美成人网| 中文字幕av免费在线观看| 国产精品色网| 91免费看片网站| 日本一二三区在线视频| 亚洲欧美日韩中文字幕一区二区三区 | 日韩av黄色在线| 久久精品国产亚洲精品| 国产亚洲精品av| 亚洲日本在线播放| 精品日韩av| 欧美日韩国产限制| 污污视频在线免费| 九九在线精品| 国内精品久久久久影院 日本资源| 亚洲欧美偷拍视频| 成人中文字幕在线| 亚洲人成77777| 性爽视频在线| 亚洲爱爱爱爱爱| 爱爱视频免费在线观看| 老司机午夜精品视频在线观看| 国产高清精品一区二区三区| 伊人免费在线| 色就色 综合激情| 国产麻豆天美果冻无码视频| 狠狠色狠狠色综合日日tαg| 91九色综合久久| 波多野结衣在线影院| 香蕉成人啪国产精品视频综合网| 人人干人人干人人| 精品国产一区二区三区小蝌蚪 | 久久精品美女| 国产盗摄在线视频网站| 日韩一区二区三区四区| 亚洲 欧美 国产 另类| 亚洲精品九九| 国产伦精品一区二区三区视频免费 | 姬川优奈av一区二区在线电影| 亚洲国产小视频在线观看| 久久久精品人妻一区二区三区四| 激情深爱一区二区| 亚洲美女自拍偷拍| 综合久久av| 久久久999精品视频| 亚洲免费视频二区| 日本一区免费视频| 欧美女同在线观看| 欧美一区二区性| 日韩av免费在线观看| 青青草在线免费视频| 精品女同一区二区三区在线播放| 麻豆精品国产传媒av| 亚洲高清电影| 精品视频第一区| 中文日产幕无线码一区二区| 亚洲欧美国产制服动漫| 69亚洲精品久久久蜜桃小说| 国产视频一区在线播放| 丝袜老师办公室里做好紧好爽| 99re6热只有精品免费观看| 欧美日韩成人网| 黄色av免费观看| 欧美性猛交xxxx免费看| 免费毛片视频网站| 蜜臀精品一区二区三区在线观看 | 国产激情在线免费观看| 久久一综合视频| 亚洲国产精品一区在线观看不卡 | 青青青国内视频在线观看软件| 日韩美一区二区三区| 日本少妇bbwbbw精品| 丰满亚洲少妇av| 日本高清一区| 东京一区二区| 日韩中文字幕在线精品| av网站在线免费看| 午夜精品爽啪视频| 黄色片网站免费| 国产伦精品一区二区三区视频青涩| 久艹在线免费观看| 亚洲免费专区| 成人午夜小视频| av电影在线免费| 日韩久久精品电影| 国产精品人人妻人人爽| 五月激情综合色| 一本在线免费视频| 成人h动漫精品| www.日日操| 日韩一区三区| 亚洲欧美综合另类中字| www.成人三级视频| 好了av在线| 精品奇米国产一区二区三区| 性色av免费观看| 亚洲欧洲综合另类| 国产ts丝袜人妖系列视频| 日韩成人精品在线观看| 国产又粗又爽又黄的视频| 日韩av三区| 91在线短视频| 欧美理论影院| 欧美丰满少妇xxxxx做受| 免费人成在线观看网站| 精品日韩一区二区三区免费视频| 精产国品一区二区| 亚洲午夜精品在线| 精品熟妇无码av免费久久| 国产福利精品一区| wwwwwxxxx日本| 亚洲欧美日本视频在线观看| 六月婷婷激情网| 菠萝蜜一区二区| 九九九九精品九九九九| 视频精品一区二区三区| 国产精品视频免费观看www| 瑟瑟视频在线看| 欧美精品少妇videofree| 91福利在线视频| 亚洲男人第一av网站| 午夜精品久久久久久久第一页按摩 | 超碰97在线看| 国产videos久久| 久久国产精品一区二区三区| 在线精品自拍| 91老司机精品视频| 欧美aaaaaa| 国产精品电影观看| 免费亚洲电影| 欧美亚洲另类视频| caoporn视频在线| 久久久久久12| 中文字幕伦理免费在线视频 | 欧美久久免费观看| 免费在线不卡av| 亚洲www啪成人一区二区麻豆| 国产精品白嫩白嫩大学美女| 国产精品青草久久| 丰满的亚洲女人毛茸茸| 国产日韩精品一区二区三区 | 久久久夜色精品亚洲| 伊人影院在线观看视频| 久久99精品久久久久| 手机版av在线| 久久99热国产| 在线观看的毛片| 久久精品国产免费看久久精品| 日本爱爱免费视频| 亚洲尤物在线| 少妇一晚三次一区二区三区| 亚洲高清资源在线观看| 日本一区二区在线| 国产videos久久| 亚洲春色在线视频| 999成人网| 亚洲人成77777| 最新国产精品久久久| 国产人妻人伦精品| 亚洲激情婷婷| 亚洲成熟丰满熟妇高潮xxxxx| 99国产精品视频免费观看一公开| 成年人午夜免费视频| 亚洲少妇在线| 欧美自拍小视频| 欧美亚洲网站| 午夜久久久精品| 国产精品99久久久久久宅男| 波多野结衣电影免费观看| 成人av电影免费观看| 新91视频在线观看| 自拍偷拍国产精品| 久久精品国产亚洲AV无码男同| 亚洲一区视频在线| 日本一区二区三区精品| 欧美无砖砖区免费| 中文字幕一区二区三区免费看| 制服丝袜中文字幕一区| 欧美综合视频在线| 亚洲欧美日韩视频一区| 你懂的视频在线| 中文字幕亚洲字幕| 久草在线视频网站| 国产精品露脸自拍| 成人看片黄a免费看视频| 欧美精品久久| 综合久久十次| 久久精品网站视频| 国产99精品国产| 国产肥白大熟妇bbbb视频| 亚洲女同女同女同女同女同69| 亚洲国产成人精品激情在线| 欧美视频三区在线播放| 亚洲爆乳无码一区二区三区| 亚洲视屏在线播放| 青春草在线视频| 国产精品久久久久久亚洲影视| 激情不卡一区二区三区视频在线 | 精品视频网站| 美女扒开大腿让男人桶| 蜜臀av性久久久久蜜臀aⅴ流畅| 亚洲美女高潮久久久| 久久久精品免费网站| 久久一二三四区| 在线欧美一区二区| 欧美一区二区公司| 尤物九九久久国产精品的分类| 黄色免费在线看| 国产成人高潮免费观看精品| 91精品入口| 热re99久久精品国产99热| 国内精品美女在线观看| 亚洲欧美日韩精品一区| 久久久久久夜精品精品免费| 久久97人妻无码一区二区三区| 欧美在线看片a免费观看| 天堂网av2014| 欧美成人午夜激情视频| 日本a人精品| 日本一区二区三区精品视频| 日韩视频精品在线观看| 熟妇人妻va精品中文字幕| 波多野结衣精品在线| 91日韩中文字幕| 欧美无乱码久久久免费午夜一区| 五月激情婷婷网| 欧美精品18videos性欧美| 欧美网站免费| 四虎影院一区二区三区 | 午夜免费一级片| 国产欧美日韩精品a在线观看| 国产成人一区二区三区影院在线| 欧美成人a视频| 欧美黑人猛交的在线视频| 国产精品看片资源| 久久成人综合| 亚洲一级片网站| 久久久久久久久久电影| 日韩 欧美 中文| 日韩成人中文电影| 狠狠躁少妇一区二区三区| 国产精品久久久久久久免费大片| 欧美日韩伊人| 久久国产免费视频| 亚洲国产精品久久久男人的天堂| 成人精品在线播放| 欧美激情一区二区三区久久久 | 亚洲成人在线网| a级大胆欧美人体大胆666| 国产伦精品一区二区三区视频黑人| 亚洲性人人天天夜夜摸| 美国黄色一级视频| 中文字幕 久热精品 视频在线| 蜜臀精品一区二区三区| 亚洲人成网7777777国产| 日韩一区二区三区在线免费观看| 欧美在线3区| 青青草原综合久久大伊人精品优势| 三级黄色片网站| 欧美少妇bbb| 色呦呦在线观看视频| 国产欧美日韩一区| 新67194成人永久网站| 老牛影视av老牛影视av| 欧美日韩一区二区三区高清| 91官网在线| 福利视频久久| 丝袜亚洲另类欧美| 911国产在线| 精品免费国产二区三区 | 亚洲国产精品第一区二区| 精品国产av色一区二区深夜久久| 精品久久久久久国产91| 国产在线一二三区| 99c视频在线| 免费国产自线拍一欧美视频| 99久久精品免费视频| 欧美精品在线一区二区三区| 2024最新电影在线免费观看| 精品日本一区二区| 久久精品国产99| 日本少妇在线观看| 在线观看欧美日韩| 欧洲一区在线| 国产精品久久久久9999小说| 亚洲人成网站精品片在线观看| 黄色一级大片在线免费看国产| 日本道色综合久久影院| 五月激情综合| 亚洲熟妇无码av| 欧美丰满嫩嫩电影| 黑人精品视频| 日本视频精品一区| 国产盗摄精品一区二区三区在线| 蜜臀精品一区二区三区| 欧美精品video| 久久精品久久久| www在线观看免费视频| 精品国产凹凸成av人网站| 欧美日韩在线精品一区二区三区激情综合|