푸터 콘텐츠로 바로가기
PYTHON 도움말

peewee Python ((작동 방식: 개발자 가이드))

Peewee는 Python에서 데이터베이스와 쉽게 상호 작용할 수 있도록 설계된 작고 표현력이 풍부한 ORM 입니다. 이 소프트웨어는 가볍고 사용하기 쉬우며, 복잡한 쿼리나 데이터베이스 스키마를 지원할 만큼 안정적입니다. Peewee는 직관적인 구문을 통해 SQLite, MySQL, PostgreSQL을 지원하여 배우기 매우 쉽기 때문에 학생과 전문가 모두에게 큰 인기를 얻고 있습니다.

IronPDF 는 PDF 문서의 생성, 읽기, 편집 및 관리를 포함한 완벽한 엔드 투 엔드 작업을 가능하게 하는 Python 라이브러리입니다. Python .NET 사용하면 Python 애플리케이션에서 IronPDF 활용하여 매우 강력한 PDF 생성 기능을 구현할 수 있습니다. 따라서 이러한 조합은 데이터베이스에서 가져온 데이터를 기반으로 PDF 보고서를 생성하는 데 매우 유용합니다.

이 통합은 Peewee와 IronPDF 결합하여 Python 개발자가 효율적인 데이터베이스 관리 및 쿼리는 물론 동적이고 데이터 기반의 PDF 문서 생성을 가능하게 하는 애플리케이션을 만들 수 있도록 합니다. 이러한 조합은 데이터 검색부터 보고서 생성까지 완벽한 워크플로우를 구축하여 전문적이고 자동화된 문서를 작성하는 데 매우 강력한 도구 세트를 제공합니다. 간단한 송장과 같은 비즈니스 보고서부터 복잡한 보고서에 이르기까지, Peewee와 IronPDF 는 모든 Python 애플리케이션에서 데이터베이스 기반 PDF 생성을 위한 완벽한 솔루션을 제공합니다.

피위 Python이란 무엇인가요?

Peewee는 데이터베이스 작업을 간편하게 해주는 작고 표현력이 풍부한 Python용 ORM입니다. 이 도구는 모델을 쉽게 생성할 수 있도록 해주며, 데이터베이스에서 여러 레코드를 검색, 추가, 업데이트 및 삭제하는 것과 같은 일반적인 쿼리를 쉽게 만들 수 있도록 해줍니다. Peewee는 SQLite, MySQL, PostgreSQL 등 다양한 백엔드를 지원하기 때문에 여러 가지 사용 사례에서 활용될 수 있습니다.

Peewee의 장점 중 하나는 단순함과 편리함입니다. Python에서는 개발자가 모델을 클래스로 쉽게 만들 수 있으며, 간단한 API 덕분에 데이터베이스에 대한 모든 쿼리는 Python 코드로 수행됩니다. 이러한 단순함에도 불구하고 Peewee는 복잡한 질문, 조인 및 복잡한 관계를 지원하고 연결 풀링을 지원하기 때문에 매우 강력합니다.

peewee Python ((How It Works: A Guide for Developers)): 그림 1 - Peewee

Peewee는 유연성과 미니멀한 디자인 덕분에 사용 편의성과 빠른 개발이 무엇보다 중요한 소규모 프로젝트 및 대규모 애플리케이션에 매우 유용합니다. 복잡한 데이터베이스 상호 작용을 최소한의 상용구 코드로 처리할 수 있다는 점 때문에 이 ORM은 모든 Python 개발자에게 매력적인 도구가 되었습니다.

피위 파이톤의 특징

Peewee는 Python에서 데이터베이스와 쉽게 상호 작용할 수 있도록 설계된 가볍고 표현력이 풍부한 ORM 라이브러리입니다. 주요 특징 몇 가지는 다음과 같습니다.

  • 쉽고 간편함: Peewee는 매우 쉽고 직관적인 API를 제공합니다. 개발자는 이 도구를 사용하면 번거로움 없이 모든 일반 속성을 가진 모델을 정의하고 Python 코드를 사용하여 데이터베이스와 쉽게 상호 작용할 수 있습니다.

  • 다양한 데이터베이스 지원: SQLite, MySQL, PostgreSQL 및 CockroachDB를 지원합니다.

  • 표현력이 풍부한 쿼리 구문: Peewee는 데이터베이스를 쿼리하기 위한 깔끔하고 표현력이 풍부한 구문을 제공합니다. 우리는 Select, Create, Update, Delete와 같은 동일한 쿼리 연산을 사용할 수 있으므로 개발자는 Python스러운 구문을 사용하여 복잡한 쿼리를 작성할 수 있습니다.

  • 모델 정의: Peewee에서는 데이터베이스 모델을 Python 클래스로 정의합니다. 클래스의 필드는 데이터베이스 열과 일치합니다. 이 정의는 데이터베이스 스키마를 변경하면 Python 코드에도 동일한 변경 사항이 적용되도록 보장하며, 그 반대의 경우도 마찬가지입니다.

  • 관계: 복잡한 데이터 모델링에 필요한 외래 키, 일대일 관계, 다대다 관계를 포함한 모든 관계를 지원합니다.

  • 연결 풀링: Peewee는 데이터베이스 연결 재사용을 통해 성능을 향상시키기 위해 연결 풀링 기능을 내장하고 있습니다.

  • 트랜잭션: 원자적 트랜잭션은 일련의 데이터베이스 작업이 실행되도록 보장하며, 만약 그 중 하나라도 실패할 경우 모든 작업이 롤백되어 데이터의 유효성이 유지됩니다.

  • 시그널 및 훅: Peewee는 레코드 저장 또는 삭제와 같은 특정 이벤트 전후에 사용자 지정 동작을 구현하기 위한 시그널과 훅을 제공합니다.

  • 마이그레이션: 또한, 이 기능은 타사 라이브러리를 기본 마이그레이션 도구인 Peewee-migrate와 통합하여 데이터베이스 스키마 마이그레이션을 관리합니다. 이렇게 하면 데이터베이스 버전 전환이 원활하게 진행될 것입니다.

  • 확장성: Peewee는 구체적인 애플리케이션 요구 사항에 따라 사용자 정의 필드, 쿼리 또는 기타 몇 가지 기능을 통해 쉽게 확장할 수 있습니다.

  • 플레이하우스 확장 기능: 이 모듈에는 SQLite용 전체 텍스트 검색, PostgreSQL 관련 기능 몇 가지, 연결 관리 도구 등 플레이하우스에 다양한 확장 기능을 제공합니다.

  • 비동기 지원: aiopeewee는 Peewee가 고성능 애플리케이션에 적합한 비동기 작업을 지원하도록 하는 확장 기능입니다.

Peewee 생성 및 구성

다음 단계는 모든 Python 프로젝트에서 Peewee를 시작하고 Peewee ORM을 사용하여 간단한 애플리케이션을 설정하는 데 도움이 됩니다.

Peewee를 설치하세요

먼저 pip를 사용하여 Peewee를 설치합니다.

pip install peewee
pip install peewee
SHELL

모델 정의하기

데이터베이스 모델은 app.py라는 Python 파일에 정의해야 합니다. 여기서는 편의상 SQLite를 사용하여 동일한 작업을 수행하겠습니다.

from peewee import SqliteDatabase, Model, CharField, IntegerField, ForeignKeyField

# Define the database connection
db = SqliteDatabase('my_database.db')

# Define a base model class
class BaseModel(Model):
    class Meta:
        database = db

# Define a User model
class User(BaseModel):
    username = CharField(unique=True)
    age = IntegerField()

# Define a Tweet model, which is related to the User model
class Tweet(BaseModel):
    user = ForeignKeyField(User, backref='tweets')
    content = CharField()

# Create the tables
db.connect()
db.create_tables([User, Tweet])
from peewee import SqliteDatabase, Model, CharField, IntegerField, ForeignKeyField

# Define the database connection
db = SqliteDatabase('my_database.db')

# Define a base model class
class BaseModel(Model):
    class Meta:
        database = db

# Define a User model
class User(BaseModel):
    username = CharField(unique=True)
    age = IntegerField()

# Define a Tweet model, which is related to the User model
class Tweet(BaseModel):
    user = ForeignKeyField(User, backref='tweets')
    content = CharField()

# Create the tables
db.connect()
db.create_tables([User, Tweet])
PYTHON

데이터 삽입

이제 데이터베이스에 데이터를 추가해 보겠습니다.

def insert_data():
    # Insert a new user
    alice = User.create(username='Alice', age=30)
    # Insert some tweets for Alice
    Tweet.create(user=alice, content='Hello world!')
    Tweet.create(user=alice, content='I love Peewee!')
    # Insert another user and a tweet for that user
    bob = User.create(username='Bob', age=25)
    Tweet.create(user=bob, content='This is Bob')

insert_data()
def insert_data():
    # Insert a new user
    alice = User.create(username='Alice', age=30)
    # Insert some tweets for Alice
    Tweet.create(user=alice, content='Hello world!')
    Tweet.create(user=alice, content='I love Peewee!')
    # Insert another user and a tweet for that user
    bob = User.create(username='Bob', age=25)
    Tweet.create(user=bob, content='This is Bob')

insert_data()
PYTHON

데이터 조회

자, 이제 데이터베이스에서 이 모든 정보를 가져오는 코드를 작성해 보겠습니다.

def query_data():
    # Query to select all users and print their usernames and ages
    for user in User.select():
        print(f'User: {user.username}, Age: {user.age}')

    # Find tweets for a specific user, in this case, 'Alice'
    for tweet in Tweet.select().join(User).where(User.username == 'Alice'):
        print(f'{tweet.user.username} tweeted: {tweet.content}')

query_data()
def query_data():
    # Query to select all users and print their usernames and ages
    for user in User.select():
        print(f'User: {user.username}, Age: {user.age}')

    # Find tweets for a specific user, in this case, 'Alice'
    for tweet in Tweet.select().join(User).where(User.username == 'Alice'):
        print(f'{tweet.user.username} tweeted: {tweet.content}')

query_data()
PYTHON

아래는 위 코드들을 모두 합친 스크린샷입니다.

peewee Python ((How It Works: A Guide for Developers)): 그림 2 - 쿼리 데이터 출력

시작하기

먼저 객체 관계형 매핑(ORM) 관련 기능을 사용하려면 Peewee를, PDF 생성을 위해서는 IronPDF 가져와야 합니다. 이 튜토리얼은 독자가 이미 Python에 대한 지식과 Python .NET 및 Peewee를 통해 IronPDF Python에서 작동하도록 설정하는 방법을 알고 있다고 가정합니다. 다음 단계에 따라 Peewee를 사용하여 데이터베이스와 상호 작용하는 간단한 애플리케이션을 만드는 방법을 안내해 드리며, IronPDF 사용하여 PDF 보고서를 생성합니다.

IronPDF 란 무엇인가요?

IronPDF Python 모듈은 PDF를 생성, 편집 및 읽기 위한 고급 라이브러리입니다. 이 프로그램은 프로그래머가 PDF를 사용하여 다양한 프로그래밍 작업을 수행할 수 있도록 수많은 기능을 제공합니다. 여기에는 기존 PDF 파일을 편집하기 위해 HTML 파일을 PDF 파일로 변환하는 작업이 포함됩니다. 이렇게 하면 PDF 형식으로 훌륭한 보고서를 더욱 유연하고 쉽게 생성할 수 있습니다. PDF를 동적으로 생성하고 처리하는 프로그램은 이러한 점을 활용할 수 있습니다.

peewee Python ((How It Works: A Guide for Developers)): 그림 3 - IronPDF

HTML을 PDF로 변환

IronPDF 의 기능을 이용하면 시점에 관계없이 모든 HTML 데이터를 PDF 문서로 쉽게 변환할 수 있습니다. 또한 이 플랫폼은 사용자가 HTML5, CSS3 및 JavaScript 의 최신 기능을 모두 활용하여 온라인 자료에서 직접 매우 혁신적이고 시선을 사로잡는 PDF 출판물을 제작할 수 있도록 지원합니다.

PDF 생성 및 편집

프로그래밍 언어를 이용하면 텍스트, 그림, 표 등을 포함한 새로운 PDF 문서를 생성할 수 있습니다. 미리 준비된 문서를 IronPDF 사용하여 열고 편집하여 추가적인 개인 설정을 할 수 있습니다. PDF 문서의 내용은 언제든지 추가, 변경 또는 삭제할 수 있습니다.

복잡한 디자인 및 스타일링

PDF에 맞는 콘텐츠 스타일을 기본적으로 제공하기 때문에 여러 글꼴, 색상 및 기타 디자인 요소를 사용하여 복잡한 레이아웃을 제어할 수 있습니다. 또한 JavaScript 사용하면 PDF 내의 동적 콘텐츠를 처리하여 HTML 콘텐츠를 쉽게 렌더링할 수 없습니다.

IronPDF 설치하세요

IronPDF Pip을 사용하여 설치할 수 있습니다. 설치 명령어는 다음과 같습니다.

pip install ironpdf
pip install ironpdf
SHELL

Peewee와 IronPDF 결합하세요

Peewee ORM을 생성 및 구성하고, 데이터를 삽입하고, PDF 보고서를 생성하는 모든 단계는 app.py 파일에 통합하여 수행할 수 있습니다.

from peewee import SqliteDatabase, Model, CharField, IntegerField, ForeignKeyField
import os
from ironpdf import *   # Import IronPDF for PDF generation
import warnings  # Suppress any warning messages for clean output

warnings.filterwarnings('ignore')

# You must specify your license key if IronPDF requires it; use an empty string for trial
License.LicenseKey = ""

# Define the database connection using SQLite
db = SqliteDatabase('my_database.db')

# BaseModel class that will define common configurations for all models
class BaseModel(Model):
    class Meta:
        database = db

# Define a User model to interact with the 'User' table in the database
class User(BaseModel):
    username = CharField(unique=True)  # Ensure username is unique
    age = IntegerField()

# Define a Tweet model for the 'Tweet' table that references User
class Tweet(BaseModel):
    user = ForeignKeyField(User, backref='tweets')  # Define relationship with User
    content = CharField()

# Connect to the database and create the necessary tables if they don't exist
db.connect()
db.create_tables([User, Tweet])

def insert_data():
    # Insert some sample data into the User and Tweet models
    alice = User.create(username='Alice', age=30)
    Tweet.create(user=alice, content='Hello world!')
    Tweet.create(user=alice, content='I love Peewee!')
    bob = User.create(username='Bob', age=25)
    Tweet.create(user=bob, content='This is Bob')

def generate_pdf():
    # Fetch the data from the database
    users = User.select()
    tweets = Tweet.select().join(User)

    # Prepare HTML content for the PDF generation
    html_content = """
    <html>
    <head><title>Data Report</title></head>
    <body>
        <h1>User Data Report</h1>
        <h2>Users</h2>
        <ul>
    """
    for user in users:
        html_content += f"<li>{user.username}, Age: {user.age}</li>"
    html_content += "</ul><h2>Tweets</h2><ul>"
    for tweet in tweets:
        html_content += f"<li>{tweet.user.username} tweeted: {tweet.content}</li>"
    html_content += "</ul></body></html>"

    # Create a PDF document using IronPDF
    renderer = ChromePdfRenderer()
    pdf = renderer.RenderHtmlAsPdf(html_content)

    # Save the PDF file to the current working directory
    output_path = os.path.join(os.getcwd(), "Data_Report.pdf")
    pdf.SaveAs(output_path)
    print(f"PDF Report saved to {output_path}")

if __name__ == '__main__':
    insert_data()       # Insert data into the database
    generate_pdf()      # Generate a PDF report based on the data
from peewee import SqliteDatabase, Model, CharField, IntegerField, ForeignKeyField
import os
from ironpdf import *   # Import IronPDF for PDF generation
import warnings  # Suppress any warning messages for clean output

warnings.filterwarnings('ignore')

# You must specify your license key if IronPDF requires it; use an empty string for trial
License.LicenseKey = ""

# Define the database connection using SQLite
db = SqliteDatabase('my_database.db')

# BaseModel class that will define common configurations for all models
class BaseModel(Model):
    class Meta:
        database = db

# Define a User model to interact with the 'User' table in the database
class User(BaseModel):
    username = CharField(unique=True)  # Ensure username is unique
    age = IntegerField()

# Define a Tweet model for the 'Tweet' table that references User
class Tweet(BaseModel):
    user = ForeignKeyField(User, backref='tweets')  # Define relationship with User
    content = CharField()

# Connect to the database and create the necessary tables if they don't exist
db.connect()
db.create_tables([User, Tweet])

def insert_data():
    # Insert some sample data into the User and Tweet models
    alice = User.create(username='Alice', age=30)
    Tweet.create(user=alice, content='Hello world!')
    Tweet.create(user=alice, content='I love Peewee!')
    bob = User.create(username='Bob', age=25)
    Tweet.create(user=bob, content='This is Bob')

def generate_pdf():
    # Fetch the data from the database
    users = User.select()
    tweets = Tweet.select().join(User)

    # Prepare HTML content for the PDF generation
    html_content = """
    <html>
    <head><title>Data Report</title></head>
    <body>
        <h1>User Data Report</h1>
        <h2>Users</h2>
        <ul>
    """
    for user in users:
        html_content += f"<li>{user.username}, Age: {user.age}</li>"
    html_content += "</ul><h2>Tweets</h2><ul>"
    for tweet in tweets:
        html_content += f"<li>{tweet.user.username} tweeted: {tweet.content}</li>"
    html_content += "</ul></body></html>"

    # Create a PDF document using IronPDF
    renderer = ChromePdfRenderer()
    pdf = renderer.RenderHtmlAsPdf(html_content)

    # Save the PDF file to the current working directory
    output_path = os.path.join(os.getcwd(), "Data_Report.pdf")
    pdf.SaveAs(output_path)
    print(f"PDF Report saved to {output_path}")

if __name__ == '__main__':
    insert_data()       # Insert data into the database
    generate_pdf()      # Generate a PDF report based on the data
PYTHON

이 코드는 Python .NET 사용하여 PDF 생성 라이브러리인 IronPDF 와 Python용 경량 ORM인 Peewee를 결합하는 방법을 보여줍니다. Peewee를 사용하면 먼저 SQLite 데이터베이스를 생성하고 적절한 필드를 사용하여 User 및 Tweet 모델을 정의합니다. 데이터베이스 테이블을 생성한 후 샘플 데이터를 해당 테이블에 추가합니다. 그런 다음, IronPDF의 ChromePdfRenderer 클래스를 사용하여, generate_pdf 함수가 이 데이터를 검색하여 HTML 문자열로 변환하고, 그 후 PDF로 렌더링합니다.

peewee Python ((How It Works: A Guide for Developers)): 그림 4 - 콘솔 출력

현재 작업 디렉터리는 PDF 파일이 저장된 위치입니다. Peewee의 데이터베이스 관리 기능과 IronPDF 세련된 PDF 문서 생성 기능을 활용하여, 이 구성은 Python 애플리케이션 내에서 원활한 데이터베이스 상호 작용과 자동화된 PDF 보고서 출력을 가능하게 합니다.

peewee Python ((How It Works: A Guide for Developers)): 그림 5 - PDF 출력

결론

IronPDF Peewee에 통합되면 데이터베이스를 관리하고 동적 PDF 문서를 생성하려는 Python 개발자에게 안정적인 옵션을 제공할 것입니다. Peewee는 사용하기 쉬운 ORM 기능을 통해 데이터베이스 상호 작용을 간소화하여 개발자가 데이터베이스 스키마를 훨씬 쉽게 구축하고 변경할 수 있도록 합니다. 반면에 IronPDF HTML 콘텐츠를 고품질 PDF 보고서로 쉽게 변환할 수 있는 패키지를 제공합니다.

따라서 이러한 조합은 데이터베이스에서 가져온 동적 데이터를 사용하여 자동 보고서를 생성하는 애플리케이션에 매우 유용할 것입니다. 개발자는 Peewee를 사용하여 모델을 정의하고 쿼리를 실행하는 것이 얼마나 쉬운지, 그리고 IronPDF 강력한 PDF 생성 기능을 제공하는지를 활용하여 효율성과 생산성을 효과적으로 향상시킬 수 있습니다. Peewee와 IronPDF 결합하면 Python 개발 환경 내에서 다양한 애플리케이션 요구 사항을 여러 가지 방식으로 충족할 수 있는 유연하고 강력한 도구가 됩니다. 이러한 업무는 송장 발행부터 특수 문서 보고서에 이르기까지 다양할 수 있습니다.

IronPDF 다른 Iron Software 제품과 결합하면 복잡한 솔루션을 사용자에게 제공하는 고객에게 더욱 우수한 소프트웨어 솔루션을 제공할 수 있습니다. 이는 프로젝트 및 절차 운영을 전반적으로 개선하는 작업을 간소화하여 여러분에게 도움이 될 것입니다.

핵심 기능 외에도 IronPDF 는 상세한 문서, 활발한 커뮤니티, 정기적인 업데이트 주기를 제공합니다. 앞서 언급된 정보를 바탕으로, 개발자는 Iron Software 최신 소프트웨어 개발 프로젝트에 있어 신뢰할 수 있는 파트너로 여길 수 있습니다. IronPDF 개발자를 위해 이 라이브러리의 모든 기능을 체험해 볼 수 있는 무료 평가판을 제공합니다. 앞으로 몇 일 동안, 라이선스 요금에 $799를 지출한 가치만큼의 이득을 충분히 얻을 수 있도록 할 것입니다.

커티스 차우
기술 문서 작성자

커티스 차우는 칼턴 대학교에서 컴퓨터 과학 학사 학위를 취득했으며, Node.js, TypeScript, JavaScript, React를 전문으로 하는 프론트엔드 개발자입니다. 직관적이고 미적으로 뛰어난 사용자 인터페이스를 만드는 데 열정을 가진 그는 최신 프레임워크를 활용하고, 잘 구성되고 시각적으로 매력적인 매뉴얼을 제작하는 것을 즐깁니다.

커티스는 개발 분야 외에도 사물 인터넷(IoT)에 깊은 관심을 가지고 있으며, 하드웨어와 소프트웨어를 통합하는 혁신적인 방법을 연구합니다. 여가 시간에는 게임을 즐기거나 디스코드 봇을 만들면서 기술에 대한 애정과 창의성을 결합합니다.

아이언 서포트 팀

저희는 주 5일, 24시간 온라인으로 운영합니다.
채팅
이메일
전화해