쿼리 실행 결과가 행(row)를 포함할 경우(예를 들어 쿼리가 select문인 경우), 해당 데이터(행, row)를 저장하고 읽어올 수 있도록 하는 함수. fetchone()은 한 줄씩, fetchall()은 모든 줄을 읽거나 저장할 수 있음. 위 테이블의 데이터를(행/row를) fetchone()으로 한 줄씩 읽어와보자.
# AWS RDS 연결
remote = mysql.connector.connect(
host = endpoint 주소,
port = 포트 넘버,
user = 'username',
database = 'dbname',
password = 'password'
)
cur = remote.cursor() # 커서 생성
cur.execute('select * from sql_file;') # select문 실행.
result = cur.fetchone() # select문의 결과 중 맨 위 행 하나를 result에 담음
print(result) # 한 번 시행하면, 맨 위의 행을 담음. 2번 시행하면 그 다음 행을, 3번 시행하면 그 다음 행을 담음.
# 즉 result는 시행할 때마다 매번 달라짐. 이것이 fetchone()의 동작 원리.
remote.close() # 연결 해제
조회할 행이 많다면, 이 얼마나 번거로운가! 이럴 때 쓰는 것이, fetchall()이다. 한 번에 데이터를 불러올 수 있다. 아래와 같이모든 행이 list형태로 출력된다. 한 줄씩 출력하고 싶다면 반복문을 사용하자. (불러올 데이터가 많을 때엔 fetchall()에 buffered=True 옵션을 주자)
물론, 연결을 해제했다고 해서 result에 담긴 결과가 사라지는 것은 당연히 아니다. 그러므로 불러 온 데이터를 우리는 이리저리 활용해볼 수 있다. 예를 들어 아래와 같이 DataFrame을 만든다던가?
CSV file 다루기
sql로 csv파일도 다뤄보자. 아래의 데이터를 사용 할 것이다.
과정은 크게 다르지 않다. sql에 연결 -> 커서 생성 -> 쿼리문 작성 후 실행 -> 잘 실행되었는지 확인 후 연결 해제
1. sql에 연결
2. 커서 생성(데이터가 클 지도 모르니 buffered 옵션 추가)
3. sql문 작성 후 실행
4. 확인 후 연결 해제.
물론 터미널로도 확인해볼 수 있다.
PK / FK
PK(기본키Primary Key)
테이블의 각 레코드를 식별하는 역할을 한다.
식별해야 하기 때문에,중복되지 않는 고유값을 가진다.
따라서Null값을 가질 수 없다
테이블 당 하나의 PK를 갖는다.컬럼 하나를 PK로 지정할 수도, 여러개를 PK로 지정할 수도 있다.