개요
PC는 서버 측을 맡을 것이고, 라즈베리파이가 단말측을 맡을 것이다.
프로젝트의 일부분으로 사용할 것인데... 결국 두쪽 모두 데이터 베이스가 필요할 것이기에 설계하고, 양쪽에서 데이터를 PUSH하는 과정을 정리한다.
1. PC측 데이터 베이스
mysql로 데이터 베이스를 설계할 것이고, 내가 사용해본 hediSQL을 사용해서 만들어보았다.
mysql 설치후, 라즈베리파이 사용자 계정을 만들어주었다.
선택한 user에서 add entry를 통해 권한을 줄 db를 선택하여 아래 보이는 권한들을 줄 수 있다.
db랑 권한을 주는 건 위를 통해서하고, HeidiSQL을 써서 관리해봤다.
나는 사용해본 툴인 HeidiSQL을 사용했다. 위처럼 127.0.0.1로 하면 로컬에 있는 root db로 접속할 수 있다. 설정한 비밀번호를 입력해 접속한다.
접속하면 만들어 놓은 db가 있다. 열을 추가해 name, age로 설정, 데이터 타입설정을 위해 CHAR, INT로 설정해서 저장한다.
2. 라즈베리파이 측 데이터 베이스
라즈베리파이는 sqlite를 설치해서 사용한다.
sudo apt-get install sqlite3
sqlite3 my_database.db
위의 명령어로 처럼 설치할 수 있으며, 아래 명령어를 통해 database를 만들고, sqlite 콘솔이 실행된다.
콘솔에서는 테이블을 만들고, 데이터를 입력할 수 있다.
CREATE TABLE my_table (
id INTEGER PRIMARY KEY,
name TEXT,
age INTEGER
);
INSERT INTO my_table (name, age) VALUES ('John', 30);
위 명령어를 차례로 입력해 테이블을 만들고, 데이터를 입력할 수 있다.
그리고 아래 명령어로 테이블을 확인가능하다.
SELECT * FROM my_table;
이제 저장한 데이터를 전송해보자.
3. 라즈베리파이 측 데이터 전송
아래는 파이썬 코드로, 라즈베리파이의 SQLite의 데이터 베이스를 읽고 sqlite_data에 저장하여, 서버 ip로 연결하여 저장하는 방법을 통해 라즈베리파이 데이터를 전송하였다.
import sqlite3
import pymysql
# 1. SQLite 데이터베이스 연결 및 데이터 읽기
sqlite_conn = sqlite3.connect('my_database.db')
sqlite_cursor = sqlite_conn.cursor()
# SQLite 테이블에서 name과 age 데이터를 가져오기
sqlite_cursor.execute("SELECT name, age FROM my_table")
sqlite_data = sqlite_cursor.fetchall()
# SQLite 연결 닫기
sqlite_conn.close()
# 2. MySQL 데이터베이스에 연결하고 SQLite 데이터를 전송
mysql_conn = pymysql.connect(
host='...', # MySQL 서버 IP
user='ras_aoddudwo', # MySQL 사용자
password='...', # MySQL 비밀번호
database='test_db' # 데이터베이스 이름
)
try:
with mysql_conn.cursor() as mysql_cursor:
# SQLite에서 가져온 데이터를 MySQL로 삽입
for row in sqlite_data:
sql = "INSERT INTO your_table (name, age) VALUES (%s, %s)"
mysql_cursor.execute(sql, row)
# 변경 사항 저장
mysql_conn.commit()
finally:
# MySQL 연결 닫기
mysql_conn.close()
실행
결과
성공