Python으로 SQLite에 행을 삽입한 후 삽입된 ID를 검색하는 방법
필수 라이브러리:
먼저, 작업을 수행하기 위해 sqlite3
라이브러리를 가져와야 합니다. 다음 명령을 사용하여 라이브러리를 가져올 수 있습니다.
import sqlite3
데이터베이스 연결:
다음으로 데이터베이스에 연결해야 합니다. 데이터베이스 파일이 현재 디렉토리에 있는 경우 다음 명령을 사용하여 연결할 수 있습니다.
connection = sqlite3.connect('my_database.db')
데이터베이스 파일이 다른 위치에 있는 경우 다음과 같이 경로를 지정하여 연결할 수 있습니다.
connection = sqlite3.connect('/path/to/my_database.db')
커서 생성:
데이터베이스에 연결되면 커서를 생성해야 합니다. 커서는 데이터베이스에 쿼리와 명령을 실행하는 데 사용됩니다. 다음 명령을 사용하여 커서를 생성할 수 있습니다.
cursor = connection.cursor()
행 삽입:
이제 데이터베이스 테이블에 행을 삽입할 수 있습니다. 다음 예에서는 users
라는 테이블에 이름, 이메일 및 전화번호 열을 가진 행을 삽입합니다.
cursor.execute("INSERT INTO users (name, email, phone) VALUES (?, ?, ?)", ("John Doe", "[email protected]", "123-456-7890"))
삽입된 ID 검색:
행을 삽입한 후 삽입된 ID를 검색할 수 있습니다. lastrowid
속성을 사용하여 커서에서 마지막 삽입된 ID를 가져올 수 있습니다. 다음 예에서는 삽입된 ID를 변수에 저장하고 출력합니다.
inserted_id = cursor.lastrowid
print("Inserted ID:", inserted_id)
커밋 및 연결 종료:
마지막으로 변경 사항을 데이터베이스에 커밋하고 연결을 종료해야 합니다. 다음 명령을 사용하여 커밋하고 연결을 종료할 수 있습니다.
connection.commit()
connection.close()
예제:
다음은 위의 모든 단계를 함께 포함하는 전체 예제입니다.
import sqlite3
connection = sqlite3.connect('my_database.db')
cursor = connection.cursor()
cursor.execute("INSERT INTO users (name, email, phone) VALUES (?, ?, ?)", ("John Doe", "[email protected]", "123-456-7890"))
inserted_id = cursor.lastrowid
print("Inserted ID:", inserted_id)
connection.commit()
connection.close()
이 예제는 users
테이블에 'John Doe'라는 이름, '[email protected]' 이메일 및 '123-456-7890' 전화번호를 가진 행을 삽입합니다. 삽입된 행의 ID는 1이고 출력됩니다.
예제 코드: Python으로 SQLite에 행을 삽입하고 삽입된 ID를 검색
import sqlite3
# 데이터베이스 연결
connection = sqlite3.connect('my_database.db')
cursor = connection.cursor()
# 테이블 생성 (필요한 경우)
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT NOT NULL,
phone TEXT NOT NULL
)
""")
# 데이터 삽입
name = "John Doe"
email = "[email protected]"
phone = "123-456-7890"
cursor.execute("INSERT INTO users (name, email, phone) VALUES (?, ?, ?)", (name, email, phone))
# 삽입된 ID 검색
inserted_id = cursor.lastrowid
# 삽입된 데이터 출력
print(f"삽입된 ID: {inserted_id}")
# 커밋 및 연결 종료
connection.commit()
connection.close()
설명:
- 라이브러리 가져오기: 먼저
sqlite3
라이브러리를 가져옵니다. - 데이터베이스 연결:
connect()
함수를 사용하여 데이터베이스 'my_database.db'에 연결합니다. - 커서 생성:
cursor()
함수를 사용하여 데이터베이스 쿼리와 명령을 실행할 커서를 생성합니다. - 테이블 생성 (필요한 경우):
CREATE TABLE IF NOT EXISTS
쿼리를 사용하여users
라는 이름의 테이블이 아직 없는 경우 해당 테이블을 만듭니다. 이 테이블에는id
,name
,email
,phone
이라는 네 개의 열이 있습니다. - 데이터 삽입:
INSERT INTO
쿼리를 사용하여users
테이블에 'John Doe', '[email protected]', '123-456-7890' 값을 가진 새 행을 삽입합니다. - 삽입된 ID 검색:
cursor.lastrowid
속성을 사용하여 삽입된 행의 ID를 변수inserted_id
에 저장합니다. - 삽입된 데이터 출력:
f-string
을 사용하여 삽입된 ID를 출력합니다. - 커밋 및 연결 종료:
commit()
함수를 사용하여 변경 사항을 데이터베이스에 저장하고close()
함수를 사용하여 데이터베이스 연결을 종료합니다.
Python으로 SQLite에 행을 삽입하고 삽입된 ID를 검색하는 대체 방법
rowid 컬럼 사용:
테이블에 rowid
라는 특수 컬럼을 추가하여 삽입된 행의 ID를 추적할 수 있습니다. 다음은 예제입니다.
import sqlite3
connection = sqlite3.connect('my_database.db')
cursor = connection.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
rowid INTEGER PRIMARY KEY,
name TEXT NOT NULL,
email TEXT NOT NULL,
phone TEXT NOT NULL
)
""")
name = "John Doe"
email = "[email protected]"
phone = "123-456-7890"
cursor.execute("INSERT INTO users (name, email, phone) VALUES (?, ?, ?)", (name, email, phone))
inserted_id = cursor.lastrowid
print(f"삽입된 ID: {inserted_id}")
connection.commit()
connection.close()
이 방법의 장점은 lastrowid
속성에 의존하지 않아도 된다는 것입니다. 하지만 테이블에 추가 컬럼을 필요로 하며 쿼리가 조금 더 복잡해질 수 있다는 단점이 있습니다.
RETURNING 키워드 사용:
INSERT
쿼리와 함께 RETURNING
키워드를 사용하여 삽입된 행의 ID를 직접 반환할 수 있습니다. 다음은 예제입니다.
import sqlite3
connection = sqlite3.connect('my_database.db')
cursor = connection.cursor()
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY AUTOINCREMENT,
name TEXT NOT NULL,
email TEXT NOT NULL,
phone TEXT NOT NULL
)
""")
name = "John Doe"
email = "[email protected]"
phone = "123-456-7890"
cursor.execute("INSERT INTO users (name, email, phone) VALUES (?, ?, ?) RETURNING id", (name, email, phone))
inserted_id = cursor.fetchone()[0]
print(f"삽입된 ID: {inserted_id}")
connection.commit()
connection.close()
이 방법의 장점은 lastrowid
속성을 사용하거나 별도의 rowid
컬럼을 사용할 필요가 없다는 것입니다. 하지만 이 기능은 SQLite 3.28 이상에서만 사용할 수 있다는 단점이 있습니다.
python sqlite