본문 바로가기
IT

파이썬 - 데이터베이스2 - 테이블 만들기

by 소혜민 2025. 1. 31.
반응형

데이터베이스와 연결하고 커서를 만들고 쿼리를 던지고 결과를 처리하고 연결을 닫는 순서로 sqlite를 운용하는 방법이라고 앞서 말씀드렸습니다. 데이터베이스를 사용하기 위해서는 우선 데이터를 저장할 테이블이 필요합니다. 이번 장에서는 테이블을 만드는 과정을 살펴보도록 하겠습니다.

 

023_sqliteDBCreate.py

 

 con = sqlite3.connect(r".\files\db\myfirst.db")

 

첫번째로 데이터베이스와 연결을 합니다. 아직까지는 데이터베이스를 만들지 않았으므로 이 문장은 데이터베이스 파일을 만드는 명령에 해당합니다. 따라서 현재 프로젝트 하위에 files라는 폴더 아래에 db라는 안에 myfirst.db라는 데이터베이스를 만들라는 의미입니다. 만일 데이터베이스 파일이 있다면 con이라는 변수를 통해 연결이 됩니다. 데이터베이스가 없다면 데이터베이스를 만들고 con과 연결이 됩니다. 다만 현재 프로젝트 아래에 files가 없거나 db라는 폴더가 없다면 에러가 발생합니다. 따라서 해당 폴더는 미리 만들어져 있어야 합니다.

 

앞서 살펴보긴 했는데 경로 앞에 붙어 있는 ‘r’은 RAW의 약자로 따옴표 안의 문자열을 있는 그대로 인식하라는 의미입니다. 왜냐하면 역슬래시와 알파벳이 합쳐지면 특수한 의미를 갖는 문자열이 되기 때문입니다. 앞에서도 설명 드리긴 했으나 다시 한번 상기드립니다.

 

 cur = con.cursor()

 

두번째로 데이터베이스를 커서와 연결합니다. 데이터베이스와 관련된 대부분의 동작은 바로 이 커서를 기반으로 수행이 됩니다.

 

 cur.execute("CREATE TABLE CustomerCode(id integer unique, name text);")

 cur.execute("CREATE TABLE AddressBook(id integer, cellNo text, addr text);")

 

세번째로 데이터베이스에 쿼리를 보냅니다. 여기서는 두 개의 쿼리를 보내는데 execute() 함수에 매개변수를 넣어서 전달을 하고 있습니다. CREATE문이 Table을 만드는 SQL문입니다. SQL은 Structured Query Language로 시퀄(SQL)이라고 부르기도 합니다. 

 

네번째는 쿼리에 대한 결과를 처리해야하는 부분입니다. 그런데 Table을 생성하는 명령에는 테이블을 만들거나 테이블이 있으면 에러를 발생시키는 두 가지 동작 밖에 없기 때문에 별도로 처리해야 할 사항이 없습니다. 실제로 위의 코드는 처음 실행할 때는 에러를 발생시키지 않지만 두 번째 실행을 하면 앞의 그림에서 보듯이 에러가 발생합니다. 에러를 보면 CustomerCode Table이 이미 존재하기 때문에 발생했습니다. 에러의 발생을 막는 방법도 별도로 알아봐야겠습니다.

 

 cur.close()

 con.close()

 

마지막으로 커서와 연결을 모두 close() 함수를 통해서 닫습니다.

 

데이터베이스의 테이블을 만드는 CREATE문에 대해서 알아보겠습니다. 우선 CREATE문의 형식은 다음과 같습니다. 

 

CREATE TABLE 테이블명 (필드이름 형식, 필드이름2 형식 …);

 

예제코드의 CREATE문은 각각 다음과 같습니다.

 

CREATE TABLE CustomerCode(id integer unique, name text);

CREATE TABLE AddressBook(id integer, cellNo text, addr text);

 

CustomerCode라는 테이블과 AddressBook이라는 테이블을 각각 만들라는 명령입니다. CustomerCode 테이블은 id와 name이라는 필드가 있고, id는 정수형 데이터만 받을 수 있고 unique, 유일한 값만을 가질 수 있습니다.name은 text 값이네요. text라면 숫자나 문자 등 모든 문자열이 들어갈 수 있습니다. 

AddressBook이라는 테이블에는 정수형 id와 핸드폰 번호가 들어갈 cellNo와 주소가 들어갈 addr 필드가 있고 그 형식은 text 입니다. 마지막에 괄호를 닫고 세미콜론(‘;’)을 찍는 것을 잊지 마세요.

 

CustomerCode 테이블에는 unique, 유일한 값의 id라는 필드가 있습니다. 여기서 유일하다는 의미는 우리의 전화번호나 주민번호와 같이 데이터베이트 Table 내에 중복된 값이 들어갈 수 없다는 의미입니다.

 

우리가 먼저 설치한 DB Browser를 통해서 우리가 만든 데이터베이스를 열어보면 다음과 같습니다. 데이터베이스 구조를 보면 우리가 만든 그대로 만들어져 있음을 볼 수 있습니다. INSERT문을 통해 데이터를 추가하지 않았기 때문에 우리가 볼 수 있는 것은 여기까지 입니다.

 

 

 



반응형

댓글