[AD]Travala 암호화폐로 유명호텔 싸게 예약하자

굳헬로의 스팀 프로그램 일기!! 열네번째 #14 파이썬을 이용하여 데이터베이스로부터 정보를 가져오기 && 스팀코인판 3대풀 임대내역 데이터베이스 작업 완료!!

in sct •  7 months ago 

steem.jpg

날씨가 정말덥네요.

오늘은 아들님 물놀이 하는동안 그거 구경하면서 옆에서 노트북을 꺼내 작업을 좀 해보았습니다.

그런데 잘 될것 같으면서도 자꾸 난관이 생기는군요.

그래도 힘내서 오늘의 프로그램 일기 남겨보겠습니다.


어젠 스팀엔진 블록익스플로러에서 특정계정의 임대내역을 뽑아와서 MySQL데이터 베이스에 정보를 저장하는것을 해보았습니다.

필요할때마다 스팀엔진 블록익스플로러에서 원하는 데이터를 뽑아내기엔 시간이 많이 걸리기 때문에, 미리 필요한 데이터를 따로 데이터베이스에 저장해두고, 바로바로 이용한다면 무척이나 효율적일 것입니다.

시간이 지나면 블록에 쌓이는 데이터가 더욱 많아지기에, 시간 날때마다 필요한 데이터를 뽑아와서 데이터베이스에 저장해두어야 하는데요.

앞으로 스팀엔진 블록을 계속 모니터링하며 필요한 정보는 데이터베이스화 할 수 있는 기능도 추가해야겠습니다.

계속 할일이 많아지지만, 오늘은 어제 데이터베이스에 저장했던 team1p의 임대 내역을 가져오는 작업을 만들어 보도록 하겠습니다.

조금전 어제 만든 코드를 실행하여 team1p로의 모든 임대 내역을 갱신하였습니다.

이제 이 데이터를 파이썬으로 주물러 보겠습니다.

먼저 데이터 베이스에 저장된 모든 데이터를 출력해 보겠습니다.

import pymysql
db = pymysql.connect(host=host, port=3306, user=user, passwd=passwd, db=db_name, charset='utf8')
try:
    cursor = db.cursor()
    sql = "SELECT * FROM delegate"
    cursor.execute(sql)
    result = cursor.fetchall()
    for row_data in result:
        print("block_num : " + str(row_data[0]) + " sender : " + row_data[1] + " to : " + row_data[2] + " symbol : " + row_data[3] + " quantity : " + str(row_data[4]) + " timestamp : " + row_data[5] )
finally:
    db.close()

코드를 실행하면


...

블록익스플로러에서 데이터를 뽑아올때와는 달리 순식간에 결과가 처리됩니다.

그런데 이 코드에서 데이터베이스에 저장된 값에 접근할때는 row_data[0] 이런식으로 접근해야 해서 값을 사용하기에 조금 불편함이 있어 다른 방법을 찾아 보았습니다.

try:
    cursor = db.cursor(pymysql.cursors.DictCursor)
    sql = "SELECT * FROM delegate"
    cursor.execute(sql)
    result = cursor.fetchall()
    for row_data in result:
        print("block_num : " + str(row_data['block_num']) + " sender : " + row_data['sender'] + " to : " + row_data['to_'] + " symbol : " + row_data['symbol'] + " quantity : " + str(row_data['quantity']) + " timestamp : " + row_data['timestamp'] )
finally:
    db.close()

역시 파이썬에는 다른 방법이 있었습니다.

cursor = db.cursor(pymysql.cursors.DictCursor) 를 사용해서 데이터베이스에 저장된 데이터에 row_data['sender'] 이렇게 좀 더 직관적으로 접근이 가능하네요.

이제 이 데이터를 가공해서 각 계정별로 team1p에 임대 준 수량을 계산해 보도록 하겠습니다.

dict = {}

for row_data in result:
    delegate_sum = delegate_sum + row_data['quantity']
    sender = row_data['sender']
    if sender in dict :
        dict[sender] = int(dict[sender]) + int(row_data['quantity'])
    else :
        dict[sender] = int(row_data['quantity'])

print("임대 총합 : ", delegate_sum)

for s in dict :
    dsum = dsum + dict[s]
    print(s + " : " + str(dict[s]) + " 지분율 : %.2f %%" % (int(dict[s]) / (delegate_sum) * 100) )

print("임대 총합 : ", dsum)

dict 딕셔너리를 생성하여 사용자 별로 임대량의 총합을 계산하였습니다.

각 계정별로 임대량 총합과 지분율까지 계산이 완료되어 출력이 되었네요.

데이터베이스에 임대내역을 저장해 놓으니 정말 간편하고 빠르게 데이터를 가져와서 이용할 수가 있습니다.

이제 이 데이터 베이스에 원피스 조합 이외에도 다른 조합의 임대내역도 저장을 해서 결과를 출력해 보겠습니다.

현재 스팀코인판에서는 유니온 조합과 나하풀 조합이 있습니다.

먼저 유니온 조합 @union.sct의 임대 내역을 저장해 보겠습니다.

스팀엔진 블록 익스플로러에 8페이지나 정보가 들어있네요.

username = "union.sct"
find = "SCT"
last_page = 8

이 값들을 입력해서 프로그램을 실행해 보겠습니다.

deer3 : 6000 지분율 : 5.20 %
lovelyyeon.sct : 3000 지분율 : 2.60 %
isaaclab : 6000 지분율 : 5.20 %
hyokhyok : 3800 지분율 : 3.29 %
dakeshi : 4000 지분율 : 3.47 %
nexgen : 3000 지분율 : 2.60 %
naha : 3000 지분율 : 2.60 %
fur2002ks : 100 지분율 : 0.09 %
tradingideas : 2000 지분율 : 1.73 %
innovit : 800 지분율 : 0.69 %
ukk : 1000 지분율 : 0.87 %
annvely : 100 지분율 : 0.09 %
morning : 0 지분율 : 0.00 %
kingbit : 1400 지분율 : 1.21 %
seraphim502 : 4000 지분율 : 3.47 %
floridasnail : 2000 지분율 : 1.73 %
new-jersey : 2000 지분율 : 1.73 %
storysharing : 3600 지분율 : 3.12 %
isi3.sct : 2000 지분율 : 1.73 %
sct.han : 7000 지분율 : 6.07 %
influencer07 : 3600 지분율 : 3.12 %
skt1 : 3000 지분율 : 2.60 %
fenrir78 : 1000 지분율 : 0.87 %
zzings : 2000 지분율 : 1.73 %
leeyh2 : 1000 지분율 : 0.87 %
jayplay.cur : 6000 지분율 : 5.20 %
goodhello : 1000 지분율 : 0.87 %
ssonagee : 2000 지분율 : 1.73 %
vip : 3000 지분율 : 2.60 %
chocolate1st : 1000 지분율 : 0.87 %
donekim : 13000 지분율 : 11.27 %
feelsogood.cur : 2000 지분율 : 1.73 %
happyberrysboy : 1000 지분율 : 0.87 %
matildah2 : 1000 지분율 : 0.87 %
sonki999.sct : 7000 지분율 : 6.07 %
buchheim : 1000 지분율 : 0.87 %
pediatrics : 1000 지분율 : 0.87 %
walktoheaven : 1000 지분율 : 0.87 %
parisfoodhunter : 1000 지분율 : 0.87 %
kibumh : 1000 지분율 : 0.87 %
임대 총합 :  107400

데이터베이스에 임대내역이 잘 들어갔네요.

이제 나하풀 @naha.sct 의 임대 내역을 저장해 보겠습니다.

5페이지로군요.

username = "naha.sct"
find = "SCT"
last_page = 5

코드를 수정하고 실행하였습니다.

앗.. 그런데 여기서 문제점이 하나 발생하였습니다.

아니 이런...

생각지도 못한 임대를 소수점 아래로 하신분이 계시는군요.

전 정수형으로만 데이터를 이용하고 있었는데, 실수형이 나오니 에러를 내뱉더군요.

그동안 작업했던 소스를 수정해서 정수형 int를 모두 실수형 float로 변경해 주었습니다.

그리고 데이터베이스에도 실수형으로 정보가 저장되도록 수정하였네요.

그리고 프로그램을 실행하여 결과를 출력해 보았습니다.

kinojun : 146.601 지분율 : 0.14 %
notouch : 3170.0 지분율 : 2.99 %
blockstudent : 5000.0 지분율 : 4.72 %
suddenly12 : 100.0 지분율 : 0.09 %
fur2002ks : 1010.0 지분율 : 0.95 %
rainingfall : 866.0 지분율 : 0.82 %
maikuraki : 1064.1399999999999 지분율 : 1.00 %
rbaggo : 228.051 지분율 : 0.22 %
eunsik : 6500.0 지분율 : 6.13 %
cheolwoo-kim : 1280.0 지분율 : 1.21 %
annvely : 100.0 지분율 : 0.09 %
pediatrics : 534.0 지분율 : 0.50 %
tradingideas : 5000.0 지분율 : 4.72 %
feelsogood.cur : 550.0 지분율 : 0.52 %
isaaclab : 4000.0 지분율 : 3.77 %
iieeiieeii : 400.0 지분율 : 0.38 %
donekim : 3000.0 지분율 : 2.83 %
deer3 : 5000.0 지분율 : 4.72 %
innovit : 1000.0 지분율 : 0.94 %
daldalpapa : 250.091 지분율 : 0.24 %
jinuking : 0.0 지분율 : 0.00 %
seraphim502 : 5000.0 지분율 : 4.72 %
goodhello : 3000.0 지분율 : 2.83 %
yann03 : 350.0 지분율 : 0.33 %
jayplay.cur : 3000.0 지분율 : 2.83 %
lovelyyeon.sct : 3000.0 지분율 : 2.83 %
epscu : 110.608 지분율 : 0.10 %
buchheim : 700.0 지분율 : 0.66 %
autoway : 0.0 지분율 : 0.00 %
new-jersey : 0.0 지분율 : 0.00 %
newbijohn : 1000.0 지분율 : 0.94 %
realmankwon : 0.0 지분율 : 0.00 %
vip : 3000.0 지분율 : 2.83 %
kimjh : 0.0 지분율 : 0.00 %
kwonjs77 : 0.0 지분율 : 0.00 %
hyokhyok : 3000.0 지분율 : 2.83 %
zzings : 3000.0 지분율 : 2.83 %
kgbinternational : 224.0 지분율 : 0.21 %
kstop1 : 100.0 지분율 : 0.09 %
talkit : 100.0 지분율 : 0.09 %
stylegold : 600.0 지분율 : 0.57 %
dmsqlc0303 : 500.0 지분율 : 0.47 %
influencer07 : 400.0 지분율 : 0.38 %
anpigon : 245.0 지분율 : 0.23 %
naha : 15800.0 지분율 : 14.91 %
chocolatelover : 500.0 지분율 : 0.47 %
onespringday : 100.0 지분율 : 0.09 %
garamee21 : 100.0 지분율 : 0.09 %
bji1203 : 1000.0 지분율 : 0.94 %
epitt925 : 160.0 지분율 : 0.15 %
banguri : 0.0 지분율 : 0.00 %
parisfoodhunter : 500.0 지분율 : 0.47 %
sonki999.sct : 5000.0 지분율 : 4.72 %
임대 총합 :  89688.49100000001

결과가 잘 출력 되었으며, 데이터베이스에도 실수형으로 저장이 잘 되었네요.

그나저나 소수점 아래 몇자리까지 표시할지 고민을 좀 해봐야겠네요.

그럼 오늘은 여기까지 해서 일기를 마치도록 하겠습니다.

이제 내일은 데이터베이스에 저장한 3대풀 조합의 정보를 웹으로 출력하는 프로그램을 짜보도록 하겠습니다.

그리고 3대풀 운영에 도움이 되기위해 조합원들에게 자동분배하는 코드도 올리도록 하겠습니다.

그럼 행복한 하루 되세요.


굳헬로의 스팀 프로그램 일기!! 시리즈

#1 굳헬로의 스팀 프로그램 일기!! 대망의 시작 #1 Python 프로그램 설치 && steemengine 파이썬 api 설치 && 간단한 steemengine 예제

#2 굳헬로의 스팀 프로그램 일기!! 그 두번째 #2 비주얼 스튜디오 코드 프로그램 설치 && 비주얼 스튜디오 코드를 사용하여 파이썬 다루기 && 간단한 steemengine 예제

#3 굳헬로의 스팀 프로그램 일기!! 세번째 #3 스팀엔진 토큰의 정보를 가져오는 findOne() && 누군가의 토큰 사용 내역을 가져오는 get_history() && JSON 데이터 출력

#4 굳헬로의 스팀 프로그램 일기!! 네번째 #4 steemengine Token 클래스 && Token.get_holder() && Token.get_market_info() && Token.get_buy_book() && Token.get_sell_book()

#5 굳헬로의 스팀 프로그램 일기!! 다섯번째 #5 스팀엔진 블록을 뒤져서 원하는 정보를 찾아보자!! 스팀엔진 마켓 거래 내역을 뽑아내는 예제

#6 굳헬로의 스팀 프로그램 일기!! 여섯번째 #6 파이썬으로 스팀엔진 토큰들을 클레임 해보자.

#7 굳헬로의 스팀 프로그램 일기!! 일곱번째 #7 프로그램 일기도 어느덧 1주일!! 드디어 첫 실전!! 무한 반복 작업 수행하기!! 이제 직접 클레임 하는 손맛은 잊자. 무한 반복 자동 클레임!!

#8 굳헬로의 스팀 프로그램 일기!! 여덟번째 #8 텔레그램 봇을 이용해 알림을 받아보자!! && 무한 반복 자동 클레임의 정보를 텔레그램으로 받아보기!!

#9 굳헬로의 스팀 프로그램 일기!! 아홉번째 #9 무한 반복 자동 클레임 업그레이드!! && 토큰 잔고 확인 && 토큰 전송과 토큰 전송 내역을 텔레그램으로 받아보기!!

#10 굳헬로의 스팀 프로그램 일기!! 열번째 #10 토큰 전송내역을 검사하고, 토큰을 전송 받으면 텔레그램으로 알림을 받아보기!!

#11 굳헬로의 스팀 프로그램 일기!! 열한번째 #11 스팀엔진 토큰 임대내역 추적. 쉽지 않았던 머나먼 여정 (1/2)

#12 굳헬로의 스팀 프로그램 일기!! 열두번째 #12 스팀엔진 토큰 임대내역 추적. 쉽지 않았던 머나먼 여정 (2/2) 스팀엔진 토큰 임대내역 추적 완료!!

#13 굳헬로의 스팀 프로그램 일기!! 열세번째 #13 웹 프로그래밍의 시작!! 파이썬을 이용하여 정보를 MySQL 데이터 베이스에 저장해보기!!

Authors get paid when people like you upvote their post.
If you enjoyed what you read here, create your account today and start earning FREE STEEM!
Sort Order:  

tradingideas님이 goodhello님을 멘션하셨습니당. 아래 링크를 누르시면 연결되용~ ^^
tradingideas님의 [암호화폐] 프로젝트#1 : 업비트 지정가 자동 매수/매도하기[5]

...요한 경우에 중지 시켰다가 다시 가동시킬 수 있으면 관리가 편할 것입니다.
텔레그램 봇을 사용하는 방법은 goodhello이 소개해 주셨습니다[1]. 이렇게 간단하게 텔레그램 봇을 사용할 수 있다니 깜짝 놀랬습니다. 그래서 이번 ...

이 더위에 물놀이 구경만 하시다니... 안타깝네요! ㅎㅎ
나머지 밑에 글은 패쓰~~ 봐도 몰라서...ㅋㅋ

union.sct님이 goodhello님을 멘션하셨습니당. 아래 링크를 누르시면 연결되용~ ^^
union.sct님의 [공지] 스판유니언 조합원 대상 15차 큐레이션 수익배분 완료 안내

...% 3 32 2차 추가 goodhello/td> 1000 1.12% 3 ...

Thank you for your continued support towards JJM. For each 1000 JJM you are holding, you can get an additional 1% of upvote. 10,000JJM would give you a 11% daily voting from the 700K SP virus707 account.

Hi @goodhello!

Your post was upvoted by @steem-ua, new Steem dApp, using UserAuthority for algorithmic post curation!
Your UA account score is currently 4.000 which ranks you at #3975 across all Steem accounts.
Your rank has improved 253 places in the last three days (old rank 4228).

In our last Algorithmic Curation Round, consisting of 243 contributions, your post is ranked at #146.

Evaluation of your UA score:
  • You're on the right track, try to gather more followers.
  • The readers like your work!
  • Try to work on user engagement: the more people that interact with you via the comments, the higher your UA score!

Feel free to join our @steem-ua Discord server