- AWS RDS 데이터 베이스를 통해 파이썬과 연동하여 SQL 작업을 공부했다.

- 먼저 visual studio에서 작업을 실행했으며, python과 sql을 연동하기 위해 mysql.connertor 모듈을 설치했다.
mydb = mysql.connertor.connect(
host = "",
port = "",
user = "",
password = "",
database = "" -> 선택사항
- 해당 문법을 통해 mydb에 sql을 연결할 수 있다.

- sql 연결 해제
mydb.close()
- 연결을 중첩으로 발생할 경우 용량을 크게 차지 하기 때문에 꺼두는 것이 좋다.

- 위 문법은 localhost로 sql에 접근할 경우 사용하는 구문으로, 위에 port를 사용하는 방법은 외부 접속을 할 때 사용한다.

- sql 연결 후 cursor() 명령어를 통해 sql에 명령을 실행할 수 있다.
cur.execute("create table sql_file(id int, name varchar(16))")
- python에서 sql에 테이블을 생성할 수 있다.

- mysql에서 확인 결과 문제 없이 정상적으로 만들어진 것을 확인했다.

- 만든 파일은 다시 삭제하고

- 이번에는 test03.sql 파일을 만들어서 해당 파일을 읽음으로써 table을 만들었다.

- 위 vscode 부분을 보면 open("test03.sql").read()를 통해 위에 만든 test03을 읽고 실행시키고
- 밑에 부분에 정상적으로 table이 만들어진 것을 알 수 있다.

- mysql.connector 모듈을 통해 먼저 sql를 연결하고 test04.sql에 있는 4개의 데이터를 sql 변수에 담았다.
- 이후 for반복문을 통해 4개의 데이터를 입력했다.
- 이후 콘솔창을 통해 확인한 결과 sql_file에 4개의 자료가 정상적으로 들어간 것을 확인

- 정상적으로 담은 sql을 python에서 다시 execute를 명령어를 통해
cur.execute("select * from sql_file")
- result 변수에 fetchall()명령어를 통해 담고 result변수를 정상적으로 입력받았다.

- result 변수에 담긴 자료를 pandas의 DataFrame을 통해 데이터프레임으로 변환하면서 sql-python간의 자료 입-출력을 연습했다.

- 이후 csv-python-sql 연결을 위해 먼저 police_station.csv파일을 df변수에 담았다.

- 그리고 sql 연결을 위해 mysql.connector 모듈을 사용하며 cursor()명령어를 통해 사전작업을 했다.

- sql 변수에 sql입력문을 넣고, for 반복문을 통해 df의 데이터를 sql에 police_station 테이블에 입력했다
sql = "insert into police_station values(%s, %s)"
for i, row df.iterrows():
cursor.execute(sql, tuple(row))
conn.commit()
- sql : %s, %s -> 각 자리에 입력값을 넣는다는 의미
- tuple(row) : 자료의 [0], [1]마다 자료의 값을 튜플 형태로 추출해서 입력
- commit() : 해당 입력문에 맞는 명령문의 자료를 입력하는 명령문

- 이제 sql 입력된 자료를
cursor.execute("select * from police_station")
result = curcor.fetchall()
- sql 명령문을 execute를 통해 모든 데이터를 뽑고
- fetchall을 통해 모든 데이터를 result변수에 담았다
- resulut[0] 확인 결과 데이터 정상적으로 입력됐다

- 마지막으로 해당 데이터를 DataFrame의 형태로 만듦

- 두번째 작업으로 2020_crime.csv 파일을 df변수에 담았다.

- 이후 sql변수에 "insert into crime_status values('2020', %s, %s, %s, %s)를 담고, for 반복문을 통해 sql 테이블에 자료를 담았다.
- conn.cursor(bufferd=True)는 많은 데이터의 양을 입-출력할 때 에러를 방지하기 위해 사용

- sql입력된 데이터를 execute("select * from crime_status") 명령문 및 fetchall을 통해 result변수에 담고 해당 데이터를 DataFrame형태로 만들었다.

- 마지막 작업으로 Seuol_CCTV.csv 파일을 불러왔다

- 해당 데이터를 sql 담기위해 데이터의 형태를 확인하고, 이에 맞는 sql table을 만들었다
cursor("create table cctv (
기관명 varchar(8), 소계 int, 2013년도이전 int,
2014년 int, 2015년 int, 2016년 int)"
-
밑에 명령콘솔창의 mysql을 통해 테이블이 정상적으로 만들어진 것을 확인

-
이후 sql 명령문을 cursor에 담아서 데이터의 자료값을 sql 입력

-
sql에 담긴 자료를 추출한 결과 정상적으로 데이터가 입력된 것을 확인하며, result 변수에 지정

-
result 변수를 DataFrame으로 확인한 결과 정상적으로 데이터가 입력됨
-
sql-python-csvFile 등 python을 중심으로 다양한 형태의 자료를 변환하며 sql의 자료 이동을 학습