Python 셀 프 취 수 조회 도구 구현
마지막 으로 QT 를 이용 하여 GUI 인터페이스 를 개발 합 니 다.사용자 인터페이스의 클릭 과 선별 조건,신호 트리거 대응 버튼 과 연 결 된 전송 슬롯 함수 가 실 행 됩 니 다.
구체 적 인 사고:
데이터베이스 연결 클래스
pandas 읽 기와 쓰기 로 Oacle 데이터 베 이 스 를 조작 합 니 다.
2.주 함수 모듈
1)입력 매개 변수 모듈,외부 입력 조건 매개 변수,데이터베이스 키 필드 맵 구축
--주:외부 txt 파일 을 읽 고,필터 필드 를 키 변환 해 야 할 수도 있 음
2)sql 구문 집합 모듈,실행 중인 업무 sql 문 구 를 여기에 통일 적 으로 저장 합 니 다.
3)데이터 처리 함수 공장
4)다 중 스 레 드 로 데이터 추출
데이터베이스 연결 클래스
cx_Oracle 은 Python 확장 모듈 로 python 에 해당 하 는 Oracle 데이터베이스 의 구동 으로 모든 데이터베이스 액세스 모듈 에서 통용 되 는 데이터베이스 API 를 사용 하여 Oracle 데이터베이스 조회 와 업 데 이 트 를 실현 합 니 다.
Pandas 는 NumPy 개발 을 바탕 으로 데이터 분석 임 무 를 해결 하기 위 한 모듈 로 Pandas 는 대량의 라 이브 러 리 와 표준 데이터 모델 을 도입 하여 대형 데이터 세트 를 효율적으로 조작 하 는 데 필요 한 방법론 과 함 수 를 제공 합 니 다.
pandas 호출 데이터 베 이 스 는 주로 readsql_table,read_sql_query,read_sql 세 가지 방식
본 고 는 주로 Pandas 중 read 를 소개 합 니 다.sql_query 방법의 사용
1:pd.read_sql_query()
, DataFrame , SQL 。
pd.read_sql_query(sql, con, index_col=None,coerce_float=True, params=None, parse_dates=None,chunksize=None)
sql: sql ,
con:
index_col: , /
coerce_float: , float
parse_dates: datetime , pd.to_datetime 。
params: sql , , 。 。
chunksize: , generator,
read_sql_query() SQL ,DELETE,INSERT INTO、UPDATE ( ), SourceCodeCloseError, 。SELECT 。 , try 。
2:pd.read_sql_table()
, DataFrame ( )
import pandas as pd
pd.read_sql_table(table_name, con, schema=None,index_col=None, coerce_float=True, parse_dates=None, columns=None,chunksize=None)
3:pd.read_sql()
SQL
import pandas as pd
pd.read_sql(sql, con, index_col=None,coerce_float=True, params=None, parse_dates=None, columns=None, chunksize=None)
다음은 Oacle 데이터 베 이 스 를 연결 하 는 연결 클래스 Oracle 을 만 듭 니 다.DB주로 두 가지 조작 데 이 터 를 제공 하 는 함수 방법.
import cx_Oracle
# Pandas Oracle
import pandas as pd
#
import os
os.environ['NLS_LANG'] = 'SIMPLIFIED CHINESE_CHINA.UTF8'
class Oracle_DB(object):
def __init__(self):
try:
# oracle
# 1:sqlalchemy create_engine()
# from sqlalchemy import create_engine
# engine = create_engine('oracle+cx_oracle://username:password@ip:1521/ORCL')
# # 2:cx_Oracle.connect()
self.engine = cx_Oracle.connect('username', 'password', 'ip:1521/database')
except cx_Oracle.Error as e:
print("Error %d:%s" % (e.args[0], e.args[1]))
exit()
#
def search_one(self, sql,sparm):
try:
# # sql
# :sparm--
df = pd.read_sql_query(sql, self.engine,params=sparm)
self.engine.close()
except Exception as e:
return "Error " + e.args[0]
return df
#
def search_all(self, sql):
try:
# # sql
df = pd.read_sql_query(sql, self.engine)
self.engine.close()
except Exception as e:
return "Error " + e.args[0]
return df
2.데이터 추출 주 함수 모듈cx_Oracle 은 Python 확장 모듈 로 python 에 해당 하 는 Oracle 데이터베이스 의 구동 으로 모든 데이터베이스 액세스 모듈 에서 통용 되 는 데이터베이스 API 를 사용 하여 Oracle 데이터베이스 조회 와 업 데 이 트 를 실현 합 니 다.
1)외부 입력 매개 변수 모듈
txt 텍스트 에는 한 줄 의 데이터 가 포함 되 어 있 습 니 다.첫 줄 의 열 이름 은 읽 을 때 첫 줄 을 무시 합 니 다.
# ID――
def buildid():
sqlid = """select * from b_build_info"""
db = Oracle_DB() #
b_build_info = db.search_all(sqlid)
ID_bUILDCODE = b_build_info.set_index("BUILDCODE")["ID"].to_dict()
return ID_bUILDCODE
#
def read_task_list():
build_code=buildid()
tasklist=[]
is_first_line=True
with open("./b_lst.txt") as lst:
for line in lst:
if is_first_line:
is_first_line=False
continue
tasklist.append(build_code.get(line.strip('
'))) #
return tasklist
2)업무 sql 구문 집합in 뒤에{0}따옴표 를 붙 이지 마 십시오.여 기 는 원 그룹 으로 들 어 갑 니 다.params 매개 변 수 는 sparm 으로 들 어 갑 니 다.
= {'Start_time':'2021-04-01','End_time':'2021-05-01'},이 매개 변 수 는 필요 에 따라 변경 할 수 있 습 니 다.
def sql_d(lst):
#
sql_d_energy_item_month = """select * from d_energy_item_month
where recorddate >= to_date(:Start_time, 'yyyy-MM-dd')
and recorddate < to_date(:End_time, 'yyyy-MM-dd')
and buildid in {0}
order by recorddate asc""".format(lst)
#
sql_d_energy_month = """select d.*,t.name from d_energy_month d join t_device_info t on d.branchid = t.id
where d.recorddate >= to_date(:Start_time, 'yyyy-MM-dd')
and d.recorddate < to_date(:End_time, 'yyyy-MM-dd')
and d.buildid = '{0}'
order by d.recorddate asc""".format(lst)
#
sql_energy_item_hour_cheak = """select * from d_energy_item_hour
where trunc(sysdate)=trunc(recorddate)
order by recorddate asc""".format(lst)
sql_collection = [sql_d_energy_item_month, sql_d_energy_item_day, sql_d_energy_item_hour, sql_d_energy_month,
sql_d_energy_day, sql_d_energy_hour, sql_energy_hour_cheak]
# sql
return sql_collection
3)업무 데이터 처리업무 데이터 처리 절차,원시 데이터 후 처리,여 기 는 소개 하지 않 습 니 다.
def db_extranction(lst,sparm,sql_type):
"""sql_type-- sql """
sql_=sql_d(lst)[sql_type] # sql
db = Oracle_DB() #
res=db.search_one(sql_,sparm)
#
RES=Data_item_factory(res) #
# res = db.search_all(sql_d_energy_item_month)
print(RES)
return RES
다 중 스 레 드 추출 데이터 부분,여기 tasklist 목록 다 중 스 레 드 추출 데이터
import threading
# Pandas Oracle
from tools.Data_Update_oracle import Oracle_DB
import pandas as pd
from concurrent import futures
if __name__ == '__main__':
#
tasklist= read_task_list()
print(tasklist)
# ,
sparm = {'Start_time':'2021-04-01','End_time':'2021-05-01'}
lst = tuple(list(tasklist))
# ,
sql_type=0
#
db_extranction(lst,sparm,sql_type)
#
: threading Thread
#threads=[threading.Thread(target=db_extranction,args=(lst,sparm,sql_type)) for lst in tasklist]
# [threads[i].start() for i in range(len(threads))]
: python concurrent , threading ,
# with futures.ThreadPoolExecutor(len(tasklist)) as executor:
# executor.map([db_extranction(lst,sparm,sql_type) for lst in tasklist],tasklist)
여기 서 전체 데이터베이스 취 수 도구 개발 프로 세 스 를 소 개 했 습 니 다.마지막 으로 파트너 에 게 공유 할 뻔 했 습 니 다.GUI 응용 프로그램 으로 만 들 었 습 니 다.자세 한 소 개 는 하지 않 고 독립 된 python 환경 을 구축 하여 응용 프로그램 을 신속하게 발표 합 니 다.
이상 은 Python 이 셀 프 취 수 조회 도 구 를 실현 하 는 상세 한 내용 입 니 다.python 셀 프 취 수 조회 에 관 한 자 료 는 다른 관련 글 을 주목 하 십시오!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
로마 숫자를 정수로 또는 그 반대로 변환그 중 하나는 로마 숫자를 정수로 변환하는 함수를 만드는 것이었고 두 번째는 그 반대를 수행하는 함수를 만드는 것이었습니다. 문자만 포함합니다'I', 'V', 'X', 'L', 'C', 'D', 'M' ; 문자열이 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.