본문 바로가기

Temp_Monitor Projects

【 Machine Learning_Project01 】Temp_Monitor : day01

☀️ 운영체제 : macos

☀️ Tools : VScode, mariaDB, Sequel Pro

☀️ DATA : 제공하지 않음

 

* Sequel Pro, home brew, macos 등 사용하지 않는 사람에게는 권장하지 않음

 

1. Brew를 통한 mariaDB 설치 및 실행

[ Terminal 실행 ]

brew install mariadb    # mariaDB 설치

mysql.server start      # mariaDB server 시작

home brew 는 맥 사용에 있어 많은 라이브러리의 설치에 도움을 주기 때문에 설치를 권장

 

 

 

2. mariaDB 초기 비밀번호 설정

: brew 를 통해 mariaDB 를 설치하고 접속해보면 비밀번호 초기 설정이 되어 있지 않거나, OS 계정 비밀번호로 초기 설정이 되어 있는 경우가 있다.

 

- sudo 를 통해 접속 후 비밀번호 변경

sudo mysql -u root    # root user로 접속

ALTER USER root@localhost IDENTIFIED BY 'PASSWORD';          # 둘 중 한가지 방법 채택
set password for root@'localhost' = password('PASSWORD');    # 둘 중 한가지 방법 채택

 

mysql 나가기 : exit 

이후 mysql -u root -p 명령 후 비밀번호를 입력하면 정상적으로 접속됨을 확인할 수 있다.

 

root 이외의 다른 유저명으로 생성하고 싶다면 아래와 같은 방법 활용

CREATE USER 'USER'@'LOCALHOST or '%'' IDENTIFIED BY 'PASSWORD';

'localhost' 는 로컬에서만, '%' 는 외부 IP 에서도 활용 가능(% 자리에 IP 값 넣기)

 

 

 

3. DATABASE 생성

CREATE DATABASE 데이터베이스명;

데이터베이스 생성까지 Terminal 활용, 이후 Sequel Pro 에서 테이블 생성

 

 

 

4. DATABASE TABLE 생성

create table tblorgdata(                   # original data table
	s_measuretime datetime not null,
	s_temp1 float,
	s_temp2 float,
	s_temp3 float,
	s_temp4 float,
	s_temp5 float,
	s_temp6 float
);

create table tbldata(                      # saving data slot table
	s_measuretime datetime not null,
	s_temp1 float,
	s_temp2 float,
	s_temp3 float,
	s_temp4 float,
	s_temp5 float,
	s_temp6 float
);

- tblorgdata TABLE 내에 기존에 가지고 있는 data.csv 파일 import

 

데이터 형태.png

 

 

5. tblorgdata TABLE 의 데이터를 tbldata TABLE 로 주기적으로 저장시키는 코드 작성

import pymysql
import time

conn = pymysql.connect(host = '127.0.0.1', user = 'root', password = 'PASSWORD', db = 'DB_NAME', charset = 'utf8')

cursor = conn.cursor()

mysql 접속 환경 구축 및 커서 생성

 

 

 

# ============= read from table ================
    query = 'select * from tblorgdata order by s_measuretime asc limit 1'   # query문 생성
    cursor.execute(query)
    result = cursor.fetchall()                                              # 1개의 레코드 반환
    arr = []
    for item in result :                                                    # 1개의 레코드마다
        for j in range(7) :                                                 # 7열에 걸쳐 삽입
            arr.append(item[j])                                             # 1개의 레코드의 1열씩 arr에 append
            print(item[j], end = ' ')                                       # 저장되는 데이터 출력
        print()                                                             # 줄바꿈

 

# ============= send to table ===============
    query = 'insert into tbldata values (sysdate(), %5.1f, %5.1f, %5.1f, %5.1f, %5.1f, %5.1f)' % (arr[1], arr[2], arr[3], arr[4], arr[5], arr[6])
    
    
    cursor.execute(query)
    conn.commit()                                                           # save to table(only need to insert, update, delete)

SQL - sysdate : 현재 날짜 및 시각을 나타내주는 문

insert into . values 로 포맷문자열을 활용하여 tblorgdata 에 있는 데이터들을 소수점 1자리까지 가져오도록 query 문 작성,

각 포맷문자열은 arr[index] 에 순서대로 위치한다.

 

 

# ============= delete old record 1 ================
    query = "delete from tblorgdata where s_measuretime = '%s'" % (arr[0])
    cursor.execute(query)
    conn.commit()


    # -----------------------------------------------------------------------
    time.sleep(60)

tblorgdata TABLE 에서 가장 오래된 데이터를 하나씩 지우고

시간 간격은 60초마다 실행될 수 있도록 한다

 

이렇게 정리된 코드를 반복문에 넣어주면,

tblorgdata 중 가장 앞에 있는(오래된) 데이터를 tbldata 테이블로 가지고 오며

기존 tblorgdata 에서 가지고 온(가장 오래된) 데이터는 지운다

이 행동을 60초마다 실행할 수 있도록 한다.

 

 

[ 전체코드 ]

import pymysql
import time

conn = pymysql.connect(host = '127.0.0.1', user = 'root', password = 'PASSWORD', db = 'DB_NAME', charset = 'utf8')

cursor = conn.cursor()


while True :
    # ============= read from table ================
    query = 'select * from tblorgdata order by s_measuretime asc limit 1'
    cursor.execute(query)
    result = cursor.fetchall()                                              
    arr = []
    for item in result :
        for j in range(7) :
            arr.append(item[j])
            print(item[j], end = ' ')
        print()                                                             

    # ============= send to table ===============
    query = 'insert into tbldata values (sysdate(), %5.1f, %5.1f, %5.1f, %5.1f, %5.1f, %5.1f)' % (arr[1], arr[2], arr[3], arr[4], arr[5], arr[6])
    
    
    cursor.execute(query)
    conn.commit()                                                           

    # ============= delete old record 1 ================
    query = "delete from tblorgdata where s_measuretime = '%s'" % (arr[0])
    cursor.execute(query)
    conn.commit()


    # -----------------------------------------------------------------------
    time.sleep(60)                                                          # delay per sec


cursor.close()
conn.close()

 

[ 터미널 실행창 ]