精品欧美一区二区三区在线观看 _久久久久国色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技術棧公眾號

国产精品乱码久久久久| 超碰在线观看97| 阿v天堂2014| 国产视频一区二| 亚洲成人精品影院| 欧美日韩综合网| 国产精品自拍电影| 亚洲欧洲视频| 中文字幕欧美精品日韩中文字幕| 中文字幕12页| 在线免费av资源| 自拍偷拍亚洲欧美日韩| 精品不卡一区二区三区| 中文亚洲av片在线观看| 伊人久久亚洲美女图片| 亚洲系列中文字幕| 久久久久亚洲av无码网站| 成人片免费看| 一区二区三区在线免费观看| 欧美中日韩一区二区三区| 不卡视频免费在线观看| 欧美专区18| 久久久久免费精品国产| 中文字幕第二区| 婷婷五月色综合香五月| 6080日韩午夜伦伦午夜伦| 欧美精品色婷婷五月综合| 91麻豆一二三四在线| 国产欧美一区二区精品性| 高清视频一区二区三区| 亚洲最大成人av| 亚洲欧美日韩视频二区| 欧美极品第一页| 日本少妇aaa| 黑人操亚洲人| 日韩精品极品视频| 天天躁日日躁狠狠躁av麻豆男男| 91九色成人| 在线一区二区观看| 日韩少妇内射免费播放18禁裸乳| 欧美videossex另类| 国产清纯白嫩初高生在线观看91| 精品国产乱码久久久久久郑州公司| 91激情在线观看| 六月丁香综合在线视频| 国产91久久婷婷一区二区| 激情五月色婷婷| 韩国av一区| 色综合91久久精品中文字幕| 99鲁鲁精品一区二区三区| 日韩av在线播放网址| 亚洲区中文字幕| 精品国产av无码| 偷拍亚洲色图| 亚洲另类激情图| 日本aaa视频| 亚洲图片久久| 亚洲午夜av电影| 亚洲午夜精品久久久久久高潮| 久草精品在线| 亚洲视频一区二区| 国产一二三四区在线| 激情婷婷综合| 日韩中文字幕在线| 久久高清内射无套| 欧美日韩亚洲一区在线观看| 欧美劲爆第一页| 男人的天堂一区二区| 国产美女一区| 国产精品露脸av在线| 伊人影院中文字幕| 国产大片一区二区| 国产一区二区在线观看免费播放| 五月激情六月婷婷| 国产亚洲综合色| 一本一道久久久a久久久精品91 | 亚洲福利小视频| 亚洲精品乱码久久| 精品不卡一区| 久久影院资源网| 日本免费在线播放| 视频一区视频二区中文字幕| 国产精品自拍小视频| 国产激情无套内精对白视频| av成人免费在线观看| 日本视频精品一区| 国产人成网在线播放va免费| 一区二区三区在线视频观看58 | chinese偷拍一区二区三区| 国产欧美一区视频| 亚洲欧洲精品一区二区| 欧美jizzhd69巨大| 亚洲综合在线五月| 国产三级中文字幕| 性欧美xxx69hd高清| 日本道色综合久久| 91丨九色丨蝌蚪| 成人av地址| 亚洲欧洲美洲在线综合| mm131丰满少妇人体欣赏图| 91麻豆国产自产在线观看亚洲| 精品激情国产视频| 日韩三级av在线| 日本不卡一区二区| 不卡的av一区| 免费a级毛片在线观看| 国产女人18毛片水真多成人如厕| 第九区2中文字幕| 中文在线а√在线8| 欧美色成人综合| 中文字幕无人区二| 欧洲毛片在线视频免费观看| 欧美丰满少妇xxxx| 超碰在线免费97| 国产一区二区三区综合| 欧美一区二区三区成人久久片| 免费看美女视频在线网站| 亚洲高清免费视频| 69久久久久久| 婷婷综合电影| 九九热视频这里只有精品| 少妇太紧太爽又黄又硬又爽| 国产精品主播直播| 日韩hmxxxx| 俺来也官网欧美久久精品| 欧美三级韩国三级日本一级| 国产原创剧情av| 婷婷六月综合| 日产日韩在线亚洲欧美| 亚洲精品国产片| 亚洲欧美电影院| 人妻丰满熟妇av无码区app| 亚洲视频国产| 久久精品国产成人| 日韩久久中文字幕| 国产91精品露脸国语对白| 亚洲精品视频一二三| 黄色在线免费观看网站| 精品国产乱码91久久久久久网站| 麻豆一区在线观看| 首页欧美精品中文字幕| 精品久久久久久一区二区里番| 爆操欧美美女| 欧美日韩国产高清一区二区三区| 在线观看一区二区三区四区| 在线成人直播| 91免费看国产| 黄色在线视频网站| 欧美日韩在线播放三区四区| 舐め犯し波多野结衣在线观看| 亚洲黄色免费| 国产精品视频免费一区| 菠萝蜜视频在线观看www入口| 日韩一区二区三区视频在线| 三级黄色在线观看| 毛片一区二区三区| 午夜精品电影在线观看| 97久久香蕉国产线看观看| 亚洲午夜未满十八勿入免费观看全集| 国产美女激情视频| 成人精品国产一区二区4080 | 天天插综合网| 国产日韩欧美在线播放| 成人免费黄色网页| 一区二区三区高清不卡| 欧美熟妇精品一区二区蜜桃视频| 在线播放不卡| 不卡视频一区二区| 成人影欧美片| 日韩欧美不卡在线观看视频| 国产亚洲精品码| 高清国产一区二区| 福利视频一二区| 欧美美女黄色| 国产精品mp4| 日本a在线播放| 91精品国产综合久久婷婷香蕉| 国产性生活大片| 国产毛片精品视频| 天堂8在线天堂资源bt| 国产精品qvod| 人体精品一二三区| 黄网站视频在线观看| 日韩欧美一级特黄在线播放| 国产一级视频在线| av男人天堂一区| 午夜激情福利在线| 999久久久91| 国产激情久久久| 国产写真视频在线观看| 日韩欧美国产一区二区在线播放 | 亚洲一区二区成人在线观看| 亚洲视频在线播放免费| 视频一区欧美日韩| 亚洲精品一卡二卡三卡四卡| 午夜精品在线| 欧美与欧洲交xxxx免费观看| 国产在线观看a| 精品国产伦一区二区三区免费| 伊人久久综合视频| 国产精品理论片| 亚洲v在线观看| 日韩成人av影视| 欧美视频免费看欧美视频| 精品久久影视| www日韩av| 久久久人成影片一区二区三区在哪下载| 精品国内产的精品视频在线观看| 国产巨乳在线观看| 色爱区综合激月婷婷| 成年人一级黄色片| 久久人人爽爽爽人久久久| 一区二区三区四区毛片| 国产日韩欧美一区在线| 在线看无码的免费网站| 亚洲尤物av| 亚洲一区制服诱惑| 最新欧美色图| 欧美成人第一页| 国产高清视频免费最新在线| 亚洲福利在线视频| 国产免费黄色大片| 日韩欧美在线视频日韩欧美在线视频 | 亚洲十八**毛片| 日韩中文字幕在线看| 亚洲欧美一区二区三| 日韩一区二区三区免费看 | 1024手机在线观看你懂的| 捆绑调教美女网站视频一区| 又大又硬又爽免费视频| 人人狠狠综合久久亚洲婷婷| 96久久精品| 99久久亚洲国产日韩美女| 57pao国产成人免费| 在线观看中文字幕的网站| 伊人久久五月天| 涩爱av在线播放一区二区| 欧美日韩和欧美的一区二区| 亚洲第一区av| 一本到不卡精品视频在线观看| 久久午夜鲁丝片午夜精品| 中文字幕欧美区| av女人的天堂| 久久久精品国产99久久精品芒果| 一区二区视频观看| 成人av网站免费观看| 又黄又爽又色的视频| 极品尤物av久久免费看| 亚洲一区在线不卡| 日韩中文欧美在线| 国产一级片黄色| 久久亚洲综合| 黑森林福利视频导航| 9久re热视频在线精品| 国产女主播自拍| 欧美日韩亚洲一区在线观看| 亚洲va久久久噜噜噜久久狠狠| 成人免费a**址| 日韩欧美视频第二区| 国产亚洲欧美日韩在线观看一区二区| 国产欧美一区二区视频| 国产精伦一区二区三区| 亚洲xxxx在线| 国产成人午夜性a一级毛片| 国产精品久久久久不卡| 欧美日韩尤物久久| 国产成人一区二区三区小说| 久久精品女人天堂av免费观看| 68精品久久久久久欧美| 一个人www视频在线免费观看| 欧美二区在线播放| 牛牛在线精品视频| 国模精品系列视频| 亚洲丝袜在线观看| 亚洲伦伦在线| 久久国产色av免费观看| 久久精品综合| 在线免费观看视频黄| 奇米亚洲午夜久久精品| 老司机午夜性大片| 成人黄色在线视频| 你懂的在线观看网站| 久久一区二区三区国产精品| 欧美黄色一级生活片| 中文字幕日韩av资源站| 国精产品久拍自产在线网站| 亚洲国产精品久久不卡毛片 | 亚洲在线观看免费| 18精品爽视频在线观看| 欧美日韩一区二区在线| 国产精品自拍第一页| 欧美日韩国产片| 亚洲h视频在线观看| 日韩精品在线观看一区| 国产区av在线| 欧美黄色三级网站| 波多视频一区| 91精品视频免费| 噜噜噜狠狠夜夜躁精品仙踪林| 欧美xxxx黑人又粗又长密月 | 亚洲欧洲偷拍精品| 毛片在线播放网站| 欧美另类在线观看| 校园春色亚洲色图| 亚洲综合大片69999| 亚洲黄页网站| 老司机午夜网站| 日本欧美一区二区三区| 精品国产免费久久久久久婷婷| 26uuu精品一区二区在线观看| 亚洲一级二级片| 天天色 色综合| 中文字幕 日韩有码| 亚洲精品美女久久| 天天影视久久综合| 97精品视频在线播放| 久久青草免费| 日本一区二区三区在线视频| 欧美另类专区| 欧美精品一区二区三区免费播放| 国产在线视频一区二区三区| 变态另类丨国产精品| 亚洲精品老司机| 精品美女久久久久| 亚洲精品在线观看网站| 五月婷婷在线视频| 日韩av色综合| 高清日韩欧美| 久艹在线免费观看| 久久精品国产成人一区二区三区 | 国内露脸中年夫妇交换精品| 亚洲国产高清国产精品| 国产精品呻吟| 亚洲AV成人精品| 亚洲乱码日产精品bd | 欧美日韩国产一区| 欧美理论在线观看| 欧美精品www| 亚洲精品777| 日韩精品伦理第一区| 亚洲美洲欧洲综合国产一区| 国产精品19p| 亚洲免费av在线| 99久久免费国产精精品| 日韩性生活视频| 日韩漫画puputoon| 欧美资源一区| 日一区二区三区| 国产精品久久久视频| 欧美综合久久久| 久久久久久青草| 日本免费久久高清视频| 欧美电影免费网站| av免费看网址| 北条麻妃一区二区三区| 妺妺窝人体色www聚色窝仙踪 | 亚洲天堂网在线观看视频| 亚洲精品理论电影| 任你弄在线视频免费观看| 亚洲自拍偷拍区| 好看的日韩av电影| 国产乱淫av麻豆国产免费| 一区二区成人在线观看| 国产福利小视频| 最近中文字幕日韩精品| 少妇精品视频在线观看| 中文字幕一区二区三区最新| 老鸭窝一区二区久久精品| 美国黄色片视频| 制服丝袜一区二区三区| 毛片免费不卡| 亚洲一区二区中文| 亚洲国产国产亚洲一二三| 制服丝袜第一页在线观看| 日韩欧美视频一区二区三区| 免费在线性爱视频| 国产精品久久中文| 999久久久91| 国产福利在线观看视频| 色悠悠久久综合| √天堂资源地址在线官网| 国产欧美一区二区| 黑丝一区二区| 泷泽萝拉在线播放| 欧美日韩另类一区| 日本三级在线播放完整版| 国产精品一区二区不卡视频| 99在线精品免费视频九九视| 久操视频在线观看免费| 欧美一区日韩一区| 日韩电影免费看| 日韩欧美在线一区二区| 国产一区日韩二区欧美三区| 久久久久成人精品无码| 亚洲日韩中文字幕| 99er精品视频| 青青青免费在线| 中文字幕乱码一区二区免费| 高潮一区二区三区乱码| 国产精品大片wwwwww|