데이터 분석 및 프로젝트

데이터베이스 연결 - GIT BASH, DBEAVER

막막한 2023. 5. 24. 14:30

인터페이스 

 

DB API 는 파이썬과 데이터베이스의 상호작용을 돕는 어떤 약속이다 !

 

PEP 249

데이터 베이스와 작업하는 코드 살펴보기 전 파이선의 PEP 249를 보자 

PEP 249는 파이썬에 명시하는 DBAPI v2.0문서이다 

 

SQLite 

위 데이터베이스는 파이썬과 함께 설치되는 가벼운 파일형 관계형 데이터베이스 

파일형 데이터베이스로 실행 중인 프로그램의 메모리에 상주할 수 있어 파일 삭제하거나 프로세스 종료등으로 데이터 손실 주의해야한다 

 

데이터베이스 연결 

import sqlite3

conn = sqlite3.connect('test.db')

 

sqlite는 아래와 같이 메모리에서도 실행될 수 있다

 

import sqlite3

conn = sqlite3.connect(':memory:')

 

해당 세션을 통해 데이터베이스와 소통하기 위한 cursor만들기

cur = conn.cursor()

 

커서메소드

cursor.execute 사용하기 - 쿼리문 바로 넘길 수 있다

 

테이블 만들기 

cur.execure(""CREATE TABLE test_table (
				name VARCHAR(32),
                age INT);
                """)

위 코드 파이썬 코드 내에서 SQL쿼리로 test_table만들었다 

 

데이터 추가하기

cur.execute("INSERT INTO test_table (name, age) VALUES ('spongebob', 12);")

#아래와 같은 방법도 사용 가능

name ='banana'
age =13

cur.execute("INSERT INTO test_table (name, age) VALUES (?,?)", (name, age))

 

레코드 더 추가하기

cur.execute("INSERT INTO test_table(name, age) VALUES ('patrick', 13);")
cur.execute("INSERT INTO test_table(name, age) VALUES ('squidward', 14);")

#아래와 같은 방법도 사용 가능

users = [('lemon', 10),
		('apple',15)]
        
for user in users:
		cur.execute("INSERT INTO test_table (name, age) VALUES (?,?);", user)

 

 

데이터베이스 연결 어플리케이션을 이용해 데이터 확인해보면 아직 데이터가 입력되지 않은 상태이다

 

con.commit

 

sqlite3의 commit함수에 대한 설명

 

- 이 메서드는 현재 트랜잭션을 커밋, 이 메서드 호출하지 않으면, 마지막 commit()호출 이후 수행한 작업은 다른 데이터베이스 연결에서 볼 수 없다 

데이터베이스에 기록한 데이터가 왜 보이지 않냐? -> 메서드 호출하는 것을 잊지 않았는지 확인하기 

 

commit은 데이터베이스 연결에 대한 connection개체 통해 사용 가능 

connection 객체인 conn 만들었기 때문에 커밋 수행

 

#type(conn)은 어떤 형식?
conn.commit()

 

cursor.fetchone, cursor.fetchall

추가한 데이터 조회

cur.execute("SELECT * FROM test_table;")

 

하지만 보이지 않는다 

리턴되는 문구들은 커서 객체에 대한 정보를 알려준다 

# 이런 문구가 보일 수도 있다

<sqlite3.Cursor object at 0x7fb026aacb20>

그렇다면 데이터베이스에서 보내는 결과 어떻게 조회할까?

 

커서의 다른 메소드인 fetchone, fetchmany, fetchall 활용해라 

 

cur.fetchall()

fetchall은 리스트 형식으로 쿼리 통해 실행된 결과 리턴한다 

fetchone은 데이터 베이스에서 전달하는 결과에서 첫번째만 리턴한다