Python에서 MySQL DB를 사용하기 위해서는 PyMySQL을 설치해야 합니다.


PyMySQL은 다음 공식 사이트에서 다운로드 가능합니다.
https://github.com/PyMySQL/PyMySQL

* 설치방법
1. CMD창을 관리자 권한으로 실행
2. Python이 설치된 폴더 하위 폴더 Scripts로 이동
ex) cd C:\Users\user\AppData\Local\Programs\Python\Python36-32\Scripts
3. 다음 명령어 실행 
pip install pymysql
4. Successfully installed pymysql-0.7.9 이 출력되면 설치 완료

* 설치환경
1. 파이썬 : Python 3.6
2. 파이썬 개발 툴 : PyCharm Community Edition 2018.1.4
3. 데이터베이스 :  MySQL 5.1.41-community


* 소스코드

import pymysql

conn = pymysql.connect(host 'localhost'user 'id'password 'password' ,db 'DB명')
# host = DB주소(localhost 또는 ip주소), user = DB id, password = DB password, db = DB명
curs = conn.cursor()

sql = "SELECT * FROM TABLE명" # 실행 할 쿼리문 입력
curs.execute(sql) # 쿼리문 실행

rows = curs.fetchall() # 데이터 패치

for in rows :
     print(i)

conn.close()

쿼리문과 for문에서 데이터를 적절히 처리해서 필요한 프로그램에 사용하면 됩니다.
오류나 질문사항은 댓글로 달아주세요.




이번에는 Java Eclipse에서 JDBC를 통해 Mysql DB를 연동하는 방법에 대해 알아보겠습니다.

- JDBC란? Java DataBase Connectivity로 자바에서 데이터베이스에 접속 할 수 있도록 자바에서 제공하는 API입니다. 


* 환경
JDK : jdk1.8.0_171
자바 개발 툴 : eclipse-jee-oxygen-3a-win32
데이터베이스 : MySQL 5.1.41-community

* 소스코드
import java.sql.*; 

public class dbtest { 
          public static void main(String arg[]) throws Exception { 
                    Connection conn; 
                    Statement stmt; 
                    ResultSet rs; 

                    Class.forName("com.mysql.jdbc.Driver");  // JDBC driver를 메모리에 로드
                    conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/DB명", 
                              "ID", "PASSWORD"); 
                    stmt = (Statement) conn.createStatement(); 
                    rs=stmt.executeQuery("SELECT * FROM TABLE명");  // 원하는 쿼리문 실행

                    while(rs.next()) { 
                              System.out.print(rs.getString("id") + " ");  
                              System.out.println(rs.getString("password")); 
                    

                    rs.close(); 
                    stmt.close(); 
                    conn.close();
          
}

코드는 매우 간단합니다.
먼저 JDBC Driver를 사용하기 위해 Class.forName을 사용하여 메모리에 등록하고
DriverManager를 통해 DB에 접속합니다.
그리고 쿼리를 준비하고 원하는 쿼리문을 실행하고 받은 데이터를 처리합니다.
마지막으로 정상적인 처리를 위해 사용한 객체들을 역순으로 닫아주면 됩니다.

위 SELECT 문 사용 예제를 통해 INSERT, DELETE, UPDATE 문을 활용하여 프로그램을 제작해 보면
어떨까요?

에러나 질문사항은 댓글로 달아주세요.




Server에서 MySQL Console 관리자 ID로 접속 후, 다음 명령어 실행
GRANT ALL PRIVILEGES ON *.* TO 아이디@'ip주소' IDENTIFIED BY '비밀번호' WITH GRANT OPTION;
아이디, 비밀번호는 Server 관리자 아이디 입력
ip주소는 Server에서 접속 받을 Client 주소를 입력해야 합니다.
입력 후 Client에서 접속 확인!



ESP8266 + OV2640

ESP8266 과 OV2640을 이용하여 영상처리와 패턴인식 프로그래밍을 해보려고 합니다.
위 사진은 ArduCam ESP8266 과 OV2640 결합 사진입니다.
배선은 따로 필요없으며 위 사진과 같이 결합 해주시면 됩니다.
하지만 코드를 업로드 하기위해서 Arduino IDE에 새로운 보드를 추가해야합니다.

* 아두이노 보드 추가 방법
1. 아두이노 스케쳐를 실행하고 파일 - 환경설정에 들어갑니다.
2. 추가적인 보드매니저 URLs 맨 오른쪽 버튼을 누르고 다음과 같이 입력합니다.
3. http://www.arducam.com/downloads/ESP8266_UNO/package_ArduCAM_index.json
4. 입력 후 확인버튼을 누릅니다.
5. 툴 - 보드 - 보드매니저로 들어갑니다.
6. ESP8266을 검색하고 보드를 설치합니다.

* 예제코드
1. 파일 - 예제 - ArduCAM - ESP8266 - ArduCAM_ESP8266_OV2640_Capture를 실행합니다.
2. memorysaver.h 를 찾아 메모장 또는 VS로 연 다음 #define OV2640_CAM 주석을 제외합니다.
3. 다시 아두이노 스케쳐로 돌아와서 다음 부분을 수정합니다.
const char* ssid = "SSID"; // SSID 대신 와이파이 이름을 적습니다.
const char* password = "PASSWORD"; // PASSWORD 대신 와이파이 비밀번호를 적습니다.
4. 업로드 버튼을 누르고 시리얼 모니터를 실행합니다.
5. 글자가 깨져보이면 보드레이트를 115200으로 맞춰줍니다.
다음과 같이 출력이 나온다면 성공입니다.
실패시 오류 화면을 캡쳐 또는 복사해서 댓글로 달아주세요.
- Connecting to "WIFI이름" - 192.168. ~~ : url 주소입니다.

* 출력화면
1. 인터넷 창을 켜서 주소 입력란에 위의 IP주소를 입력하고 /capture를 입력하여 접속해봅시다.
예) 192.168.0.0/capture
2. IP주소/stream 입력 시 화면에 연속된 영상이 출력됩니다.
다음과 같이 캡쳐된 화면이 인터넷창에 출력됩니다. 만약 초점이 안맞을 시 OV2640 카메라 앞부분을 돌려서 초점을 맞춰봅시다.

다음은 C# 프로그램으로 아두이노로 캡쳐한 사진을 이용하여 패턴인식을 해보겠습니다.
질문사항은 댓글로 남겨주세요!



'Arduino' 카테고리의 다른 글

아두이노 블루투스(HC06) 연동  (0) 2018.09.04
[Arduino] 아두이노 DIY 스마트 책상 만들기!  (7) 2018.08.21


* 문제
n개의 정수로 이루어진 임의의 수열이 주어진다. 우리는 이 중 연속된 몇 개의 숫자를 선택해서 구할 수 있는 합 중 가장 큰 합을 구하려고 한다. 단, 숫자는 한 개 이상 선택해야 한다.
예를 들어서 10, -4, 3, 1, 5, 6, -35, 12, 21, -1 이라는 수열이 주어졌다고 하자. 여기서 정답은 12+21인 33이 정답이 된다.

* 풀이
수열의 원소중 연속된 숫자를 선택해 가장 큰 합을 구하기 위해서 동적계획법(Dynamic Programming)을 사용합니다. 첫번째 원소부터 별도의 배열(dp배열)에 수열값과 그전까지 합한 값 중 큰값을 저장합니다. 그중 최댓값을 구하면 정답입니다. 이해가 안가시면 아래 코드를 주석과 함께 한 줄 씩 해석해 보시기 바랍니다.

* 소스코드

#include <iostream> 
#define MAX(a,b) ((a) > (b) ? (a) : (b)) 
using namespace std; 

int main(){ 
     int input_value = 0; 
     cin >> input_value; 
     int *data = new int[input_value]; 
     int *dp = new int[input_value];  // 배열 동적 할당
     int max = -1001; // max는 입력 값 중 가장 작은값보다 작은값

     for (int i = 0; i < input_value; i++)  
          cin >> data[i]; // 데이터 입력

     dp[0] = data[0]; // 첫번째 원소는 그대로 대입(그 자체로 최대값)

     for (int i = 1; i < input_value; i++) 
          dp[i] = MAX(data[i], data[i] + dp[i - 1]); 
          // dp배열에 원소 값과 그전 dp값을 합한 값 중 큰 값 대입

     for (int i = 0; i < input_value; i++) 
          if (max < dp[i]) max = dp[i]; // 최댓값 검색

     cout << max; 

     delete[] dp; 
     delete[] data; // 배열 동적 할당 메모리 해제

     return 0; 
}

질문 및 오류사항은 댓글로 달아주세요.


'자료구조, 알고리즘' 카테고리의 다른 글

정렬 알고리즘 종류  (0) 2018.09.12
검색 알고리즘 종류  (2) 2018.09.11
자료구조 그래프(Graph)  (1) 2018.09.06
자료구조 힙(Heap)  (0) 2018.09.05
자료구조 이진 탐색 트리(Binary Search Tree)  (0) 2018.09.01
자료구조 트리(Tree)  (0) 2018.08.30
[자료구조] 큐 QUEUE  (0) 2018.08.19
[자료구조] 스택 STACK  (0) 2018.08.19

to Top