☀️ 운영체제 : 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
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()
'Temp_Monitor Projects' 카테고리의 다른 글
【 Machine Learning Project_01 】 Temp_Monitor : day03 QT 데이터프레임, 로그데이터 삽입 (1) | 2023.01.01 |
---|---|
【 Machine Learning Project_01 】 Temp_Monitor : day02 (1) | 2022.12.29 |