Skip to content

행을 저장하고 다시 읽기 (한국어)

🌐 save-a-row.md의 번역입니다. 영어 원문이 표준이며, CI가 영어 원문과의 구조 일치를 검사합니다.

이 단원에서는 작은 테이블을 만들어 행 하나를 저장하고, 새 연결에서 그 행을 읽습니다. 첫 쿼리 실행하기 다음에 이어지는 단원입니다.


시작하기 전에

앞 단원에서 마련한 것이 필요합니다.

  • 첫 쿼리 실행하기의 first_query.py가 (2,)를 출력해, 다섯 가지 연결 값이 동작하는 것을 확인했어야 합니다.
  • 같은 폴더와 활성화된 가상 환경(새 터미널이면 source .venv/bin/activate를 다시 실행)

이 단원은 사용자 계정에 pycubrid_quickstart_notes라는 테이블을 만듭니다. 시작하기 전에에서 정한 연습용 데이터베이스나 계정을 쓰고, 운영 데이터베이스는 쓰지 마세요.


프로그램 작성하기

같은 폴더에 first_saved_row.py를 만듭니다. Docker 실습 환경을 쓰지 않는다면 SETTINGS에 직접 쓸 다섯 가지 값을 넣으세요.

import pycubrid

SETTINGS = {"host": "localhost", "port": 33000, "database": "testdb", "user": "dba", "password": ""}

conn = pycubrid.connect(**SETTINGS)
cur = conn.cursor()

# 1. Create a table that belongs to this tutorial. The comment marks it, so the
#    cleanup script only ever drops this tutorial's own table.
cur.execute(
    "CREATE TABLE pycubrid_quickstart_notes (id INT PRIMARY KEY, note VARCHAR(100))"
    " COMMENT = 'created by the pycubrid quickstart'"
)
conn.commit()

# 2. Insert one row. The ? marks are filled with the values that follow, in order.
cur.execute(
    "INSERT INTO pycubrid_quickstart_notes (id, note) VALUES (?, ?)",
    (1, "my first saved row"),
)
conn.commit()  # commit makes the change permanent and visible to others
cur.close()
conn.close()

# 3. Check from a brand-new connection that the committed row was saved.
check = pycubrid.connect(**SETTINGS)
check_cur = check.cursor()
check_cur.execute("SELECT id, note FROM pycubrid_quickstart_notes ORDER BY id")
print("Rows seen by a new connection:", check_cur.fetchall())
check_cur.close()
check.close()

실행하기

python first_saved_row.py

두 번째 연결에서도 저장한 행이 보입니다.

Rows seen by a new connection: [(1, 'my first saved row')]

프로그램이 한 일

  • SETTINGS는 다섯 가지 연결 값을 한 번만 적어 두고, connect(**SETTINGS)는 그 값을 키워드 인자로 넘깁니다. 그래서 두 연결이 같은 값을 씁니다.
  • CREATE TABLE이 튜토리얼 테이블을 만들었습니다. 테이블의 주석은 이 테이블이 튜토리얼의 것임을 표시하며, 안전하게 마치기는 무언가를 삭제하기 전에 이 주석을 확인합니다.
  • ? 표시는 자리 표시자입니다. pycubrid는 문장을 보내기 전에 각 ?를 튜플의 해당 값으로 안전하게 이스케이프해 바꿉니다. 값을 SQL 문자열에 직접 붙여 넣지 말고 항상 이 방법으로 전달하세요. 각 Python 타입을 어떻게 보내는지는 파라미터 바인딩에 있습니다.
  • commit()은 변경을 영구적으로 만듭니다. 커밋하기 전에는 다른 연결에 변경이 보이지 않습니다. 새 연결 check가 행이 저장되었음을 보여 줍니다.
  • fetchall()은 결과에 남은 모든 행을 튜플의 리스트로 읽습니다.

다시 실행하면

파일을 두 번 실행하거나 중단된 뒤 다시 실행하면 첫 문장에서 Class dba.pycubrid_quickstart_notes already exists로 멈춥니다(소유자 이름 dba는 사용자 이름입니다). 이전 실행에서 만든 테이블이 아직 남아 있다는 뜻입니다. 직접 삭제하지 말고 안전하게 마치기의 정리 스크립트를 실행한 뒤 first_saved_row.py를 다시 실행하세요.


다음 단계

행이 저장되었습니다. 다음으로 커밋과 롤백에서 두 번째 행을 추가하고, 저장되기 전에 되돌려 봅니다.