ホームページ  >  記事  >  バックエンド開発  >  ORM フレームワーク Python でのデータベースの実際

ORM フレームワーク Python でのデータベースの実際

WBOY
WBOYオリジナル
2023-06-10 17:42:092508ブラウズ

近年、Python は効率的で使いやすく柔軟なプログラミング言語となり、Python 開発の分野ではデータベース ORM フレームワークの適用がますます一般的になってきています。 Databases は、MySQL、PostgreSQL、SQLite、Microsoft SQL Server などのさまざまなデータベースをサポートする、シンプルで直感的な軽量の ORM フレームワークです。この記事では、データベース フレームワークと、Python 開発におけるその具体的なアプリケーションについて詳しく紹介します。

1. ORM フレームワークの概念

ORM はオブジェクト リレーショナル マッピングの略で、リレーショナル データベース テーブルと Python オブジェクトの間のマッピングであり、これにより開発者は SQL ステートメントを操作するテクノロジが不要になります。 Python で ORM フレームワークを適用すると、開発者により多くの選択肢が提供され、プログラム開発がより便利になります。

2. Databases フレームワーク

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. テーブルと列の作成

データベース フレームワークは、複雑なクエリ ステートメントを作成する 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 オブジェクトを使用し、users テーブルを定義して 4 つのフィールド (id、ユーザー名、パスワード、電子メール) を作成します。

  1. SQL ステートメントの実行

データベース フレームワークには、操作に SQL ステートメントを直接使用する、より柔軟な方法も用意されています。 SQL ステートメントは、execute() メソッドを通じて実行できます。コードは次のとおりです:

result = await database.execute(query)

query は SQL ステートメントのコードを表し、result は実行結果です。実行が成功すると、辞書が返されます。 type リストで構成され、各辞書は SQL クエリ結果のレコードを表します。

5. データベースでの ORM の使用

データベース フレームワークは、SQL ステートメントを操作するための ORM もサポートしているため、開発者にとってはより便利です。 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. モデルを定義する

このブログの例では、2 つのデータ モデルを定義する必要があります。1 つは、ブログ投稿オブジェクトを表すブログ モデルです。生成されるコードは次のとおりです。

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)

もう 1 つは、ユーザー オブジェクトを表す User モデルです。生成されたコードは次のとおりです:

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() メソッドを使用して条件を結合します。トラバース時に多数のペアを返す生成された A デバイスを取得します。クエリ データを使用してデータをフィルタリングおよび並べ替えることもできます。

要約

データベース フレームワークは、Python 開発者向けの柔軟で使いやすい、軽量の ORM フレームワークです。さまざまなデータベースを簡単にサポートし、開発者がデータの保存、操作、フィルター、並べ替えなどを容易に行うことができます。この記事では、データベースへの接続からモデル操作の定義、データ挿入やクエリ操作に至るまで、データベース フレームワークの柔軟性と使いやすさを示し、開発者が Python プログラムをより効率的に開発しやすくします。

以上がORM フレームワーク Python でのデータベースの実際の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。