Python과 데이터베이스를 사용하여 등록 앱을 만드는 방법
Python은 표준 라이브러리에 뛰어난 데이터베이스 지원 기능이 내장되어 있으므로 Django ORM과 같은 외부 프레임워크에 의존하지 않고도 데이터베이스를 만들고 상호 작용할 수 있습니다.
SQLite는 가볍고 Python과 쉽게 통합할 수 있습니다. 간단한 사용자 등록 앱을 사용하여 Python에서 데이터베이스 프로그래밍의 기본 원칙을 알아보세요.
Python에서 데이터베이스를 만드는 방법
이 GitHub 저장소 에서 이 튜토리얼에 사용된 코드를 찾을 수 있습니다.
Python에서 데이터베이스를 생성하고 상호 작용하려면 연결 과 커서 라는 두 가지 주요 항목이 필요합니다 .
연결은 기존 데이터베이스에 연결하거나 새 데이터베이스를 만드는 데 도움이 됩니다. SQLite를 사용하여 Python에서 데이터베이스 연결을 만드는 방법은 다음과 같습니다.
import sqlite3# Connect to a (new) databaseconn = sqlite3.connect('path/to/database.db')# Close the connectionconn.close()
connect () 메소드는 기존 데이터베이스에 대한 경로를 사용합니다. 지정된 경로에 데이터베이스가 없으면 데이터베이스를 생성합니다. 데이터베이스와의 상호작용이 끝나면 데이터베이스 연결을 닫아야 합니다.
커서는 연결된 데이터베이스와 상호 작용하는 데 도움이 됩니다. 커서를 사용하여 Python 프로그램 내에서 SQL 쿼리를 실행합니다. 커서를 만드는 방법은 다음과 같습니다.
cursor = conn.cursor()# Close the cursorcursor.close()
열려 있는 연결 객체에 대해 커서() 메서드를 호출하여 커서를 만들 수 있습니다 .
Python에서 데이터베이스 트랜잭션을 실행하는 방법
커서를 사용하면 SQL 문, 쿼리 또는 스크립트를 실행하여 데이터를 읽거나 쓰거나 데이터베이스 구조를 변경할 수 있습니다.
데이터베이스 트랜잭션을 실행하는 데 사용할 수 있는 세 가지 주요 방법이 있습니다.
- 커서.실행 . 이 방법은 단일 SQL 문을 실행합니다. 사용 방법은 다음과 같습니다. 이 코드는 커서의 실행 메소드를 호출하여 SQL 문이 포함된 문자열을 전달합니다.
cursor.execute(""" CREATE TABLE IF NOT EXISTS users ( name TEXT, age INTEGER )""")
- Cursor.executemany . 이 방법을 사용하면 매번 다른 매개변수를 사용하여 동일한 SQL 문을 두 번 이상 실행할 수 있습니다. SQL 문과 iterable이라는 두 가지 인수를 사용합니다. 이를 위한 좋은 용도는 여러 개체를 데이터베이스에 한 번에 삽입하는 것입니다. 위의 코드는 excutemany 메서드를 사용하여 데이터베이스에 값을 여러 번 삽입합니다.
data = [ ('Alice', 25), ('Bob', 30), ('Charlie', 22)]cursor.executemany("""INSERT INTO users (name, age) VALUES (?,?)""", data)
? _ SQL 문의 자리 표시자. excutemany 메소드는 이를 각 객체에 해당하는 값으로 대체합니다.
- 커서.실행스크립트 . 이름에서 알 수 있듯이 이 방법은 SQL 스크립트를 실행합니다. SQL 문을 다른 파일에 작성하고 실행 스크립트 메서드를 사용하여 실행할 수 있습니다.
with open("path/to/script.sql") as file: sql_script = file.read()cursor.executescript(sql_script)
Python 및 SQLite3을 사용하여 등록 앱을 구축하는 방법
등록 앱의 논리에는 Python으로 사용자 정보를 가져와 데이터베이스에 저장하는 작업이 포함됩니다. 이 단계에서는 Python 및 SQLite3을 사용하여 간단한 등록 시스템을 만드는 방법을 보여줍니다.
1단계: 기존 데이터베이스에 연결하거나 새 데이터베이스 만들기
앱에 대한 데이터베이스를 생성하거나 기존 데이터베이스에 연결하는 것부터 시작하세요.
import sqlite3conn = sqlite3.connect('database.db')cursor = conn.cursor()# your app's code goes herecursor.close()conn.close()
위의 코드는 연결된 데이터베이스와 상호 작용하기 위한 연결 개체와 커서를 생성합니다.
2단계: 사용자를 위한 테이블 생성
사용자가 등록할 때 제공할 데이터를 저장하려면 테이블이 필요합니다. 커서로 생성하는 방법은 다음과 같습니다.
cursor.execute(""" CREATE TABLE IF NOT EXISTS users ( first_name TEXT, last_name TEXT, email TEXT UNIQUE, password TEXT )""")conn.commit()
이 코드는 데이터베이스에 users 라는 테이블이 없는 경우 이를 생성합니다. 사용자 정보를 보관하기 위해 테이블에 4개의 열을 만듭니다. 이메일 필드는 사용자가 동일한 이메일로 여러 계정을 생성하는 것을 방지하기 위해 고유합니다.
conn.commit 에 대한 호출은 쿼리를 데이터베이스에 커밋하는 데 중요합니다. 그렇지 않으면 데이터베이스가 변경되지 않습니다.
Executescript 메소드를 사용하는 경우 SQL 파일 끝에 COMMIT 키워드를 추가할 수 있으므로 conn.commit을 호출할 필요가 없습니다.
3단계: 사용자 데이터 수집
Python 함수를 사용하면 코드를 쉽게 재사용할 수 있으므로 등록 기능을 처리하는 함수를 만드는 것이 좋습니다. 이 기능은 사용자의 이름, 성, 이메일, 비밀번호를 수집합니다.
def register_user(): first_name = input("Enter your first name: ") last_name = input("Enter your last name: ") email = input("Enter your email: ") password1 = input("Enter your password: ") password2 = input("Confirm your password: ")
4단계: 비밀번호 정확성 확인
사용자가 동일한 비밀번호를 두 번 입력하도록 Register_user 함수를 수정하십시오 . 그렇지 않은 경우 비밀번호를 다시 입력하라는 메시지를 표시해야 합니다. 다음과 같은 루프를 사용하여 이를 달성할 수 있습니다.
def register_user(): first_name = input("Enter your first name: ") last_name = input("Enter your last name: ") email = input("Enter your email: ") while True: password1 = input("Enter your password: ") password2 = input("Confirm your password: ") # Check password correctness if password1 == password2: print("You have successfully registered!") break else: print("Your passwords must match")
이번 변경으로 인해 사용자는 비밀번호가 일치하지 않으면 등록할 수 없습니다.
5단계: 이메일 고유성 확인
사용자 테이블을 생성하는 SQL 문은 이메일 필드를 고유하게 정의합니다. 이는 사용자가 이미 존재하는 이메일로 가입하면 데이터베이스가 오류를 반환한다는 의미입니다. 적절하게 행동하려면 Python 예외를 처리 해야 합니다 .
def register_user(): first_name = input("Enter your first name: ") last_name = input("Enter your last name: ") while True: email = input("Enter your email: ") password1 = input("Enter your password: ") password2 = input("Confirm your password: ") # Check password correctness if password1 == password2: try: print("You have successfully created an account.") break except sqlite3.IntegrityError: print("Error: This email is already registered.") else: print("Your passwords must match.")
이 코드는 try-Exception 블록을 사용하여 이메일 중복으로 인해 발생하는 오류를 처리합니다. 데이터베이스에서 IntegrityError가 발생하면 while 루프가 계속 진행되어 사용자에게 다른 이메일 주소를 입력하라는 메시지가 표시됩니다.
이 샘플 앱의 경우 이메일 주소가 중복되어 IntegrityError가 발생한다고 가정하는 것이 안전합니다. 실제 앱에서는 발생할 수 있는 다른 문제를 해결하기 위해 고급 오류 처리를 사용할 가능성이 높습니다.
6단계: 데이터베이스에 사용자 데이터 삽입
이제 사용자 데이터를 수집하고 확인했으므로 이를 데이터베이스에 추가할 차례입니다. 이를 수행하려면 SQL 쿼리를 사용할 수 있습니다 . Try-Exception 블록을 다음과 같이 수정하세요.
try: cursor.execute(""" INSERT INTO users (first_name, last_name, email, password) VALUES (?,? ,? ,?) """, (first_name, last_name, email, password2)) conn.commit() print("You have successfully created an account.") breakexcept sqlite3.IntegrityError: print("Error: This email is already registered.")
수정된 try-Exception 블록에서 커서는 SQL 삽입 작업을 실행합니다. 마지막으로 conn.commit 메소드는 SQL 작업을 데이터베이스에 커밋합니다.
위의 모든 단계를 수행했다면 사용자를 등록하고 데이터베이스에 저장하는 애플리케이션이 있어야 합니다. SQLite용 DB 브라우저 와 같은 앱을 사용하여 데이터베이스 내용을 볼 수 있습니다.
컬렉션 유형 대신 데이터베이스 사용
간단한 데이터베이스의 경우 자체 코드를 롤링하는 것이 더 쉬울 수 있습니다. 그러나 애플리케이션이 성장하고 데이터베이스가 더욱 복잡해지면 Django ORM과 같은 도구를 사용하여 작업을 단순화하는 것이 좋습니다.
낮은 수준의 데이터베이스 기술을 계속 연습하려면 등록 프로그램을 보완하는 로그인 시스템을 구현해 보세요.
답글 남기기