psycopg2를 사용하여 한 쿼리로 여러 행 삽입
psycopg2를 사용하여 한 쿼리로 여러 행 삽입
이 가이드에서는 psycopg2
를 사용하여 한 쿼리로 여러 행을 PostgreSQL 데이터베이스에 삽입하는 방법을 설명합니다.
필요한 것
- 설치된 Python 3
- 설치된 PostgreSQL 데이터베이스
- 설치된 psycopg2 라이브러리
단계
- 연결 설정
import psycopg2
# 데이터베이스 연결 정보
conn = psycopg2.connect(
dbname="your_database_name",
user="your_username",
password="your_password",
host="your_host",
port="your_port"
)
- 커서 가져오기
# 커서 생성
cursor = conn.cursor()
- 데이터 준비
# 삽입할 데이터
data = [
("John Doe", 30, "male"),
("Jane Doe", 25, "female"),
("Peter Jones", 40, "male"),
]
- 쿼리 작성
# 여러 행을 삽입하는 쿼리
query = """
INSERT INTO users (name, age, gender)
VALUES (%s, %s, %s)
"""
- 쿼리 실행
# 쿼리 실행 및 데이터 바인딩
cursor.executemany(query, data)
- 변경 사항 커밋
# 변경 사항 커밋
conn.commit()
- 커서 및 연결 닫기
# 커서 닫기
cursor.close()
# 연결 닫기
conn.close()
예제
다음은 위 코드를 사용하여 users
테이블에 여러 행을 삽입하는 완전한 예제입니다.
import psycopg2
# 데이터베이스 연결 정보
conn = psycopg2.connect(
dbname="mydatabase",
user="postgres",
password="password",
host="localhost",
port="5432"
)
# 커서 생성
cursor = conn.cursor()
# 삽입할 데이터
data = [
("John Doe", 30, "male"),
("Jane Doe", 25, "female"),
("Peter Jones", 40, "male"),
]
# 여러 행을 삽입하는 쿼리
query = """
INSERT INTO users (name, age, gender)
VALUES (%s, %s, %s)
"""
# 쿼리 실행 및 데이터 바인딩
cursor.executemany(query, data)
# 변경 사항 커밋
conn.commit()
# 커서 닫기
cursor.close()
# 연결 닫기
conn.close()
이 코드를 실행하면 users
테이블에 다음 행이 삽입됩니다.
| name | age | gender |
|-----------|------|---------|
| John Doe | 30 | male |
| Jane Doe | 25 | female |
| Peter Jones | 40 | male |
참고
executemany()
함수는 반복 가능한 개체에서 데이터를 가져와 쿼리에 바인딩하는 데 사용됩니다. 이는 여러 행을 삽입하는 경우 특히 유용합니다.- 쿼리에 값을 바인딩할 때 %s 플레이스홀더를 사용해야 합니다. psycopg2는 이러한 플레이스홀더를 데이터에 자동으로 바인딩합니다.
- 변경 사항을 영구적으로 유지하려면
commit()
함수를 호출해야 합니다.
예제 코드: psycopg2를 사용하여 한 쿼리로 여러 행 삽입
import psycopg2
# 데이터베이스 연결 정보
conn = psycopg2.connect(
dbname="mydatabase",
user="postgres",
password="password",
host="localhost",
port="5432"
)
# 커서 생성
cursor = conn.cursor()
# 삽입할 데이터
data = [
("John Doe", 30, "male"),
("Jane Doe", 25, "female"),
("Peter Jones", 40, "male"),
]
# 여러 행을 삽입하는 쿼리
query = """
INSERT INTO users (name, age, gender)
VALUES (%s, %s, %s)
"""
# 쿼리 실행 및 데이터 바인딩
cursor.executemany(query, data)
# 변경 사항 커밋
conn.commit()
# 커서 닫기
cursor.close()
# 연결 닫기
conn.close()
| name | age | gender |
|-----------|------|---------|
| John Doe | 30 | male |
| Jane Doe | 25 | female |
| Peter Jones | 40 | male |
설명:
- 라이브러리 가져오기:
코드는 먼저
psycopg2
라이브러리를 가져옵니다. 이 라이브러리는 Python에서 PostgreSQL 데이터베이스와 상호 작용하는 데 필요합니다. - 데이터베이스 연결:
다음으로 코드는 데이터베이스 연결을 설정합니다. 이를 위해
dbname
,user
,password
,host
및port
와 같은 연결 정보를 제공해야 합니다. - 커서 생성: 연결되면 코드는 커서를 만듭니다. 커서는 데이터베이스와 상호 작용하는 데 사용되는 객체입니다.
- 삽입할 데이터 준비:
다음으로 코드는 삽입할 데이터를 준비합니다. 이 데이터는
data
라는 변수에 저장된 튜플 목록입니다. 각 튜플에는 이름, 나이 및 성별이라는 세 개의 값이 포함됩니다. - 쿼리 작성:
다음으로 코드는 여러 행을 삽입하는 쿼리를 작성합니다. 이 쿼리는
users
테이블에 이름, 나이 및 성별 열에 값을 삽입합니다. - 쿼리 실행:
다음으로 코드는
executemany()
함수를 사용하여 쿼리를 실행합니다. 이 함수는 반복 가능한 개체(이 경우data
변수)에서 데이터를 가져와 쿼리에 바인딩합니다. - 변경 사항 커밋:
쿼리가 실행되면 코드는
commit()
함수를 사용하여 변경 사항을 커밋합니다. 이렇게 하면 데이터베이스에 대한 변경 사항이 영구적으로 저장됩니다. - 커서 및 연결 닫기: 마지막으로 코드는 커서와 연결을 닫습니다. 이는 더 이상 필요하지 않은 리소스를 해제하는 데 중요합니다.
이 예제는 psycopg2
를 사용하여 한 쿼리로 여러 행을 삽입하는 방법을 보여주는 기본적인 방법입니다. 필요에 따라 쿼리와 데이터를 수정하여 다양한 상황에 맞게 코드를 조정할 수 있습니다.
추가 정보
psycopg2를 사용하여 한 쿼리로 여러 행 삽입: 대체 방법
for 루프 사용:
import psycopg2
# 데이터베이스 연결 정보
conn = psycopg2.connect(
dbname="mydatabase",
user="postgres",
password="password",
host="localhost",
port="5432"
)
# 커서 생성
cursor = conn.cursor()
# 삽입할 데이터
data = [
("John Doe", 30, "male"),
("Jane Doe", 25, "female"),
("Peter Jones", 40, "male"),
]
# 쿼리 작성
query = """
INSERT INTO users (name, age, gender)
VALUES (%s, %s, %s)
"""
# for 루프를 사용하여 각 행을 삽입
for row in data:
cursor.execute(query, row)
# 변경 사항 커밋
conn.commit()
# 커서 닫기
cursor.close()
# 연결 닫기
conn.close()
prepare() 함수 사용:
import psycopg2
# 데이터베이스 연결 정보
conn = psycopg2.connect(
dbname="mydatabase",
user="postgres",
password="password",
host="localhost",
port="5432"
)
# 커서 생성
cursor = conn.cursor()
# 삽입할 데이터
data = [
("John Doe", 30, "male"),
("Jane Doe", 25, "female"),
("Peter Jones", 40, "male"),
]
# 쿼리 준비
cursor.prepare(query)
# for 루프를 사용하여 각 행을 삽입
for row in data:
cursor.execute(row)
# 변경 사항 커밋
conn.commit()
# 커서 닫기
cursor.close()
# 연결 닫기
conn.close()
psycopg2.extras.execute_batch() 함수 사용:
import psycopg2
from psycopg2.extras import execute_batch
# 데이터베이스 연결 정보
conn = psycopg2.connect(
dbname="mydatabase",
user="postgres",
password="password",
host="localhost",
port="5432"
)
# 커서 생성
cursor = conn.cursor()
# 삽입할 데이터
data = [
("John Doe", 30, "male"),
("Jane Doe", 25, "female"),
("Peter Jones", 40, "male"),
]
# execute_batch() 함수를 사용하여 데이터를 삽입
execute_batch(cursor, query, data)
# 변경 사항 커밋
conn.commit()
# 커서 닫기
cursor.close()
# 연결 닫기
conn.close()
- for 루프 사용: 이 방법은
executemany()
함수보다 코드가 더 명확하고 읽기 쉽지만 성능이 약간 저하될 수 있습니다. prepare()
함수 사용: 이 방법은executemany()
함수보다 성능이 향상될 수 있지만 쿼리가 변경될 경우 코드를 업데이트해야 할 수도 있습니다.psycopg2.extras.execute_batch()
함수 사용: 이 방법은executemany()
함수와 유사하지만 더 많은 기능을 제공합니다. 예를 들어, 데이터 삽입 중에 오류가 발생하면 처리할 수 있습니다.
사용할 방법은 특정 요구 사항에 따라 다릅니다. 성능이 중요한 경우 psycopg2.extras.execute_batch()
함수를 사용하는 것이 좋습니다. 코드가 명확하고 읽기 쉬운 것이 중요한 경우 for
루프를 사용하는 것이 좋습니다.
참고:
- 위의 예제는 모두 PostgreSQL 10.0 이상을 사용하는 것을 가정합니다. 이전 버전의 PostgreSQL을 사용하는 경우
psycopg2
문서에서 해당 버전에 대한 특정 지침을 참조하십시오.
python postgresql psycopg2