SQLAlchemy는 데이터베이스 운영을 위한 높은 수준의 추상화를 제공하는 강력한 Python SQL 라이브러리입니다. SQLAlchemy의 ORM(Object Relational Mapping) 프레임워크를 사용하면 복잡한 SQL 문을 작성하거나 데이터베이스 연결 및 트랜잭션과 같은 기본 세부 사항을 처리하지 않고도 프로그램 내에서 데이터베이스를 객체 지향적으로 편리하게 운영할 수 있습니다. 이 기사에서는 SQLAlchemy의 ORM 프레임워크를 심층적으로 소개하고 이를 사용하여 다양한 데이터베이스 작업을 완료하는 방법을 살펴보겠습니다.
1. SQLAlchemy 설치 및 구성
SQLAlchemy를 사용하기 전에 먼저 설치해야 합니다. pip 또는 conda와 같은 패키지 관리자를 사용하여 SQLAlchemy를 설치할 수 있습니다.
pip install sqlalchemy
설치가 완료된 후 Python 프로그램에서 SQLAlchemy 라이브러리를 사용할 수 있습니다. 사용을 시작하기 전에 프로그램에서 SQLAlchemy 엔진과 메타데이터를 초기화해야 합니다. 이를 달성하려면 다음 코드를 사용할 수 있습니다.
from sqlalchemy import create_engine, MetaData engine = create_engine('数据库连接字符串') metadata = MetaData(bind=engine)
그 중 '데이터베이스 연결 문자열'을 실제 데이터베이스 연결 문자열로 바꿔야 합니다. 예:
engine = create_engine('mysql+pymysql://root:password@localhost/test')
MySQL 데이터베이스가 여기서 사용되며 사용자 이름은 root입니다. , 비밀번호는 비밀번호, 테스트용으로 연결된 데이터베이스 이름입니다.
2. 데이터베이스 테이블 정의 및 ORM 매핑
SQLAlchemy의 ORM 프레임워크를 사용하여 작동하기 전에 먼저 데이터베이스 테이블의 구조를 정의해야 합니다. 이는 Python 클래스를 정의하여 달성할 수 있습니다. 예:
from sqlalchemy import Column, Integer, String class User(Base): __tablename__ = 'users' id = Column(Integer, primary_key=True) name = Column(String(50)) age = Column(Integer) email = Column(String(120), unique=True) def __repr__(self): return f"<User(name='{self.name}', age={self.age}, email='{self.email}')>"
이 예에서는 'users'라는 데이터베이스 테이블에 해당하는 User 클래스를 정의합니다. 이 테이블에는 ID, 이름, 나이, 이메일이라는 네 가지 필드가 포함되어 있습니다. Python 클래스에서 이러한 속성을 정의함으로써 매핑 관계를 설정하고 테이블의 각 열은 Python 클래스의 속성에 해당합니다. __repr__ 함수를 사용하면 객체의 속성을 편리하게 출력할 수 있습니다.
사용자 클래스와 데이터베이스 테이블을 매핑하려면 데이터 테이블의 메타데이터 개체도 정의해야 합니다. 이 객체에는 표현, 열 이름, 데이터 유형, 제약 조건 등과 같은 데이터 테이블의 구조를 설명하는 일부 정보가 포함되어 있습니다. 동시에, 데이터베이스 세션 객체를 생성하기 위한 세션 팩토리를 생성하기 위해 sessionmaker 함수도 사용해야 합니다.
from sqlalchemy.orm import sessionmaker Base.metadata.create_all(engine) Session = sessionmaker(bind=engine)
여기에서는 create_all() 메서드를 사용하여 Base 클래스에서 상속받은 모든 클래스를 매핑합니다. Session 객체는 데이터베이스 엔진에 바인딩되어야 하는 데이터베이스 세션을 생성하는 데 사용되는 팩토리 함수입니다.
3. 데이터베이스 작업에 ORM 사용
데이터 테이블의 클래스와 메타데이터 개체를 정의한 후 데이터베이스 작업에 ORM을 사용할 수 있습니다. SQLAlchemy의 ORM은 CRUD 작업 및 쿼리 작업에 사용할 수 있는 일련의 API를 제공합니다. 이러한 작업은 아래에서 별도로 소개하겠습니다.
ORM에서 가장 일반적으로 사용되는 작업 중 하나는 데이터를 추가하는 것입니다. 이는 데이터 테이블 개체를 생성하고 이를 세션에 추가하여 달성할 수 있습니다.
from sqlalchemy.orm import Session user = User(name='Alice', age=20, email='alice@example.com') session = Session() session.add(user) session.commit()
이 예에서는 User 개체를 생성하여 세션에 추가합니다. 마지막으로, commit() 메소드를 호출하여 데이터가 데이터베이스에 제출됩니다.
ORM 프레임워크를 사용하여 데이터를 수정합니다. Rollback() 및 commit() 메서드를 사용하여 트랜잭션 작업을 구현할 수 있습니다.
session = Session() user = session.query(User).filter_by(name='Alice').first() if user: user.age = 21 session.rollback() session.commit()
이 예에서는 먼저 세션 개체의 query() 메서드를 사용하여 데이터베이스에서 'Alice'라는 사용자 레코드를 얻습니다. 그런 다음 사용자의 age 속성이 수정되고 rollback() 메서드가 호출됩니다. 이 작업은 수정 후 데이터베이스에서 발생한 모든 업데이트 작업을 실행 취소합니다. 마지막으로 commit() 메소드를 호출하면 수정된 데이터가 데이터베이스에 제출됩니다.
ORM 프레임워크를 사용하여 데이터를 삭제하는 방법도 매우 간단합니다. 삭제할 데이터를 답장에서 직접 삭제할 수 있습니다.
session = Session() user = session.query(User).filter_by(name='Alice').first() if user: session.delete(user) session.commit()
이 예에서는 먼저 query() 메서드를 사용하여 데이터베이스에서 'Alice'라는 사용자 레코드를 가져옵니다. 그런 다음 세션에서 이 레코드를 삭제하고 commit() 메서드를 통해 삭제 작업을 데이터베이스에 제출합니다.
query() 메서드를 사용하여 쿼리 작업을 수행할 수 있고, filter_by() 메서드를 사용하여 쿼리 조건을 지정할 수 있습니다. 쿼리가 완료된 후 all() 메서드를 사용하여 모든 결과를 가져오거나 first() 메서드를 사용하여 첫 번째 결과를 가져올 수 있습니다.
session = Session() users = session.query(User).all() for user in users: print(user)
이 예에서는 먼저 query() 메서드를 사용하여 User 테이블에서 모든 레코드를 가져왔습니다. 그런 다음 모든 결과를 반복하고 속성을 출력합니다.
간단한 쿼리 외에도 order_by() 메서드를 사용하여 특정 열을 기준으로 정렬하거나 Limit() 메서드를 사용하여 반환되는 결과 수를 제한하는 등 일부 고급 쿼리 메서드를 사용할 수도 있습니다.
users = session.query(User).order_by(User.age.desc()).limit(10).all()
여기서는 User 테이블에서 age 열을 기준으로 내림차순으로 상위 10개 레코드를 가져옵니다.
4. 요약
SQLAlchemy는 강력한 Python SQL 라이브러리이며 ORM 프레임워크는 데이터베이스 운영을 위한 높은 수준의 추상화를 제공합니다. 클래스, 메타데이터 객체 및 세션 팩토리를 정의함으로써 다양한 데이터베이스 작업을 쉽게 구현할 수 있습니다. SQLAlchemy는 CRUD 작업, 쿼리 작업, 트랜잭션 작업 등에 사용할 수 있는 다양한 API를 제공합니다. 동시에 다양한 요구 사항을 충족하기 위해 다양한 데이터베이스 엔진과 데이터 유형도 지원합니다.
위 내용은 Python의 ORM 프레임워크 SQLAlchemy에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!