2018/12/31抓取裝置投運前兩天的電流數據來判斷通訊情況

目的:判斷舊裝置更換時在線情況
方法:通過一天所上傳電流數據來對比;
1、按系統來抓取;
2、先在系統db庫裏將1832開頭的裝置編號與kid號獲取到,列個表,然後拿着這個表在223裏匹配投運時間,再將投運時間反推兩天,再在his表裏以kid和時間來匹配電流數據。最後加上判斷。

一、SQL
1、篩選
二、SQL報錯:剛開始懷疑是由於頻繁連數據庫導致訪問遭拒絕,參考此報告後發現是SQL寫錯了。
File "G:/station/.idea/裝置通訊斷開情況.py", line 42, in <module>
cur.execute(check_sql3)
File "src\pymssql.pyx", line 465, in pymssql.Cursor.execute
pymssql.ProgrammingError: (102, b"Incorrect syntax near '4030000000001'.DB-Lib error message 20018, severity 15:\nGeneral SQL Server error: Check messages from the SQL Server\n")

三、腳本

-- coding:UTF-8 --

import os
import pymssql
import cx_Oracle
import arrow #導時間戳的模塊
import xlwt
DEVICE = []
KID = []
TIME = []
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
os.environ['NLS_LANG'] = 'AMERICAN_AMERICA.AL32UTF8'
conn = pymssql.connect(host=('****'), user='**', password='***', database='TAS3.2_DB_XA')
cur = conn.cursor()
check_sql1 = "SELECT liXHQDA21_DeviceID,sFactoryNum FROM XHQDA21_Device where sFactoryNum LIKE '1832%'" #DB庫中拿裝置編號與KID號
cur.execute(check_sql1)
A = cur.fetchall()

print(A)

for B in A:
c = B[1]
G = B[0]
DEVICE.append(c)
KID.append(G)

print(DEVICE)

for F in DEVICE:

print(F)

# 鏈接orcal庫,獲取投運時間
tns = cx_Oracle.makedsn('***********, 'orcl')
db = cx_Oracle.connect('*****', '***********', tns)
cur = db.cursor()
check_sql2 = "SELECT TIME_TOU FROM APP_DEVICE WHERE DEVICE_CODE = %s "%F    #總用戶數量
cur.execute(check_sql2)
TIME_TOU = cur.fetchall()
Datetime = TIME_TOU[0][0]
TIME.append(Datetime)
TIME_duan1 = arrow.get(Datetime).timestamp*1000 - 86400*2      #將datetime格式變爲時間戳
TIME_duan2 = arrow.get(Datetime).timestamp * 1000 - 86400 * 3
# print(TIME_duan)

抓取電流數據數量

conn1 = pymssql.connect(host=('****'), user='**', password='*****', database='TAS3.2_HISXA')
cur1 = conn1.cursor()
for kid in KID:
Kd = str(kid)
KiD = 'dev
'+Kd
print(KiD)
check_sql3 = "SELECT field_26 FROM " +KiD+ " WHERE TasTimeStamp >= " + str(TIME_duan2) + " and TasTimeStamp <= " + str(TIME_duan1) #DB庫中拿裝置編號與KID號
cur1.execute(check_sql3)
p = cur1.fetchall()
P = len(p)
print(P)
def save_excel(fin_result, tag_name, file_name):
book = Workbook(encoding='utf-8')
tmp = book.add_sheet('陝西加密裝置電池電壓裝置斷開情況明細')
times = len(fin_result) + 1
for i in range(times): # i代表的是行,i+1代表的是行首信息
if i == 0:
for tag_name_i in tag_name:
tmp.write(i, tag_name.index(tag_name_i), tag_name_i)
else:
for tag_list in range(len(tag_name)):
tmp.write(i, tag_list, str(fin_result[i - 1][tag_list]))
book.save(r'C:\Users\Administrator\Desktop\%s.xls' % file_name)

conn.close()

注:腳本可以實現目的,但依然存在很大不足
1、運行速度較慢
2、只能一個系統一個系統的抓,不能實現自動切換抓取
3、數據未存入excel

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章