>  기사  >  백엔드 개발  >  실제로 Python의 ORM 프레임워크 데이터베이스

실제로 Python의 ORM 프레임워크 데이터베이스

WBOY
WBOY원래의
2023-06-10 17:42:092509검색

최근 몇 년 동안 Python은 효율적이고 사용하기 쉬우며 유연한 프로그래밍 언어로 자리 잡았으며 Python 개발 분야에서는 Databases ORM 프레임워크의 적용이 점점 더 보편화되고 있습니다. Databases는 MySQL, PostgreSQL, SQLite 및 Microsoft SQL Server를 포함하되 이에 국한되지 않는 다양한 데이터베이스를 지원하는 간단하고 직관적이며 가벼운 ORM 프레임워크입니다. 이 기사에서는 데이터베이스 프레임워크와 Python 개발의 특정 애플리케이션을 자세히 소개합니다.

1. ORM 프레임워크

ORM은 관계형 데이터베이스 테이블과 Python 객체 간의 매핑을 의미하므로 개발자가 더 이상 프로그래밍 과정에서 프로그래밍을 수행할 필요가 없습니다. Python의 ORM 프레임워크 적용은 개발자에게 더 많은 선택권을 제공하고 프로그램 개발을 더욱 편리하게 만듭니다.

2. 데이터베이스 프레임워크

Databases는 Django ORM 개발자 Andrew Goodwin이 개발한 간단한 ORM 프레임워크로, 가볍고 편리하며 사용하기 쉽다는 점과 MySQL, PostgreSQL을 포함한 다양한 데이터베이스를 지원합니다. , SQLite, Microsoft SQL Server 및 기타 유형의 데이터베이스.

  1. 데이터베이스 프레임워크 설치

데이터베이스 프레임워크를 설치하려면 pip를 사용하여 설치할 수 있습니다. 명령은 다음과 같습니다.

pip install databases==0.4.*
  1. 데이터베이스 프레임워크를 개발에 사용하기 전에

, 먼저 데이터베이스에 연결해야 합니다. 데이터베이스에 연결하는 데 필요한 매개변수에는 데이터베이스 유형, 호스트 이름, 데이터베이스 이름, 사용자 이름 및 비밀번호 등이 포함됩니다. 이번 개발에서는 MySQL 데이터베이스에 연결을 시도합니다.

import databases

DATABASE_URL = "mysql://user:password@hostname/database_name"

database = databases.Database(DATABASE_URL)

여기서 QAQsaaspassword는 데이터베이스에 연결하기 위한 비밀번호, Askdnsadn312as는 데이터베이스에 연결하기 위한 사용자 이름, localhost는 호스트 이름 또는 데이터베이스의 IP 주소이며 my_database는 데이터베이스 이름입니다.

  1. 테이블 및 열 생성

Databases 프레임워크는 SQL 표현식 언어를 지원하여 복잡한 쿼리 문을 생성하므로 개발자는 SQL 실행 프로세스를 보다 유연하게 제어할 수 있습니다. 데이터베이스 프레임워크에서는 Table 클래스를 사용하여 테이블을 생성하고 Column 클래스를 사용하여 열을 생성할 수 있습니다.

테이블 생성 코드는 다음과 같습니다.

import sqlalchemy

metadata = sqlalchemy.MetaData()

users = sqlalchemy.Table(
    "users",
    metadata,
    sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True),
    sqlalchemy.Column("username", sqlalchemy.String),
    sqlalchemy.Column("password", sqlalchemy.String),
    sqlalchemy.Column("email", sqlalchemy.String),
)

여기에서는 SQLAlchemy의 MetaData 객체를 사용하고 사용자 테이블을 정의하여 4개의 필드(id, 사용자 이름, 비밀번호 및 이메일)를 생성합니다.

  1. SQL 문 실행

데이터베이스 프레임워크에서는 SQL 문을 직접 사용하여 보다 유연한 방식으로 작업할 수 있는 방법도 제공합니다. SQL 문은 실행() 메서드를 통해 수행할 수 있습니다. 코드는 다음과 같습니다.

result = await database.execute(query)

여기서 쿼리는 SQL 문 코드를 나타내며 결과는 실행이 성공하면 구성된 목록을 반환합니다. 각 dict는 SQL 쿼리 결과의 레코드를 나타냅니다.

5. 데이터베이스에서 ORM 사용

데이터베이스 프레임워크는 ORM을 지원하여 SQL 문을 운영하므로 개발자에게 더욱 편리합니다. ORM 방법은 개체 관계를 데이터베이스에 매핑하는 데 도움이 되어 코드를 더 읽기 쉽고 유지 관리하기 쉽게 만듭니다.

ORM을 사용하면 모델을 정의하여 데이터베이스를 운영할 수 있습니다. 코드는 다음과 같습니다.

import sqlalchemy

metadata = sqlalchemy.MetaData()

users = sqlalchemy.Table(
    "users",
    metadata,
    sqlalchemy.Column("id", sqlalchemy.Integer, primary_key=True),
    sqlalchemy.Column("username", sqlalchemy.String),
    sqlalchemy.Column("password", sqlalchemy.String),
    sqlalchemy.Column("email", sqlalchemy.String),
)

class UserModel:
    id: int
    username: str
    password: str
    email: str

    __tablename__ = "users"

    query: sq.Select

    def __init__(self, **kwargs):
        for key, value in kwargs.items():
            setattr(self, key, value)

여기에서는 데이터 테이블 개체를 나타내는 UserModel 모델 클래스를 정의하는 동시에 간단히 정의할 수 있습니다. SQLAlchemy에서 테이블과 열의 정의를 완료하면 ORM을 데이터베이스에 매핑할 수 있어 편리하고 빠르며 유지 관리가 쉽습니다.

3. 애플리케이션 예제

여기에서는 데이터베이스 프레임워크의 구체적인 작동을 보여주기 위해 간단한 블로그 애플리케이션을 예로 들어 보겠습니다.

1. 데이터베이스 연결

데이터베이스 연결에 필요한 정보도 다음 코드와 같이 매우 간단합니다.

import databases

DATABASE_URL = "mysql://user:password@hostname/database_name"

database = databases.Database(DATABASE_URL)

여기서 DATABASE_URL은 데이터베이스 시스템에 연결하기 위해 MySQL에 연결하기 위한 다양한 매개변수를 지정합니다.

2. 모델 정의

이 블로그 예제에서는 두 가지 데이터 모델을 정의해야 합니다. 하나는 블로그 게시물 개체를 나타내는 블로그 모델입니다.

class Blog:
    id: int
    title: str
    description: str
    content: str

    __tablename__ = "blog"

    query: sq.Select

    def __init__(self, **kwargs):
        for key, value in kwargs.items():
            setattr(self, key, value)

다른 하나는 사용자입니다. 사용자 개체를 나타내고 생성하는 모델 코드는 다음과 같습니다.

class User:
    id: int
    name: str
    email: str
    password: str

    __tablename__ = "user"

    query: sq.Select

    def __init__(self, **kwargs):
        for key, value in kwargs.items():
            setattr(self, key, value)

마찬가지로 간단한 정의를 사용하여 ORM을 연결하는 MySQL 데이터베이스에 매핑합니다.

3. 테이블 생성

우리가 운영하는 데이터베이스 시스템이 MySQL이기 때문에 생성되는 코드는 다음과 같습니다.

CREATE TABLE `blog` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `title` varchar(100) DEFAULT NULL,
  `description` varchar(100) DEFAULT NULL,
  `content` text,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

CREATE TABLE `user` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(45) DEFAULT NULL,
  `email` varchar(100) DEFAULT NULL,
  `password` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

4. 데이터 삽입은 ORM을 사용하여 쉽게 할 수 있습니다. , 생성된 코드는 다음과 같습니다.

async def create_blog_post(title: str, description: str, content: str):
    query = blog.insert().values(title=title, description=description, content=content)
    return await database.execute(query)

async def create_user(name: str, email: str, password: str):
    query = user.insert().values(name=name, email=email, password=password)
    return await database.execute(query)

여기에서는 insert() 메서드를 사용하여 데이터 삽입 작업을 완료합니다. 이는 읽기가 매우 쉽고 개발자가 코드를 더 잘 유지 관리할 수 있도록 해줍니다.

5. 쿼리 데이터

데이터베이스 프레임워크는 다음 코드와 같이 쿼리 작업도 지원합니다.

async def get_blog_post(id: int):
    query = blog.select().where(blog.c.id == id)
    return await database.fetch_one(query)

async def get_all_users():
    query = user.select()
    return await database.fetch_all(query)

async def get_users_by_email(email: str):
    query = user.select().where(user.c.email == email)
    return await database.fetch_all(query)

여기에서는 select() 메서드를 사용하고 조건을 연결하여 생성기를 얻고 탐색할 때 여러 쌍을 반환합니다. . 쿼리 데이터를 사용하여 데이터를 필터링하고 정렬할 수도 있습니다.

요약

데이터베이스 프레임워크는 Python 개발자를 위한 유연하고 사용하기 쉬운 경량 ORM 프레임워크로, 다양한 데이터베이스를 쉽게 지원하고 개발자가 데이터를 저장, 운영, 필터링 및 정렬할 수 있도록 해줍니다. 이 문서에서는 데이터베이스 연결부터 모델 작업 정의, 데이터 삽입 및 쿼리 작업에 이르기까지 데이터베이스 프레임워크의 유연성과 사용 용이성을 보여줌으로써 개발자가 Python 프로그램을 더욱 효율적으로 개발할 수 있도록 해줍니다.

위 내용은 실제로 Python의 ORM 프레임워크 데이터베이스의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.