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

WBOY
リリース: 2023-06-10 17:42:09
オリジナル
2568 人が閲覧しました

近年、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 サイトの他の関連記事を参照してください。

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート