ホームページ バックエンド開発 Python チュートリアル Python Webサイト開発でどのORMフレームワークが使用されるかを詳しく説明した記事

Python Webサイト開発でどのORMフレームワークが使用されるかを詳しく説明した記事

Aug 23, 2018 pm 05:47 PM

前回の記事では、Python に関する知識を多少なりとも紹介しましたが、実際の戦闘では Python 開発ページ を使用する必要があります。フレームワーク開発ページ が最もシンプルで簡単です。この章では、Python ページ開発orm フレームワーク を使用したページの開発について紹介します。

ORM とは

##ORM

つまり オブジェクト リレーショナル マッピング、正式名はオブジェクト リレーショナル マッピングです。 しかし、それは何をするのでしょうか?

Web バックグラウンドの最適化を経験したことがある方は、Web バックグラウンドでの作業の大部分がデータの追加、削除、変更、クエリであることがわかります。データベースに接続する必要がある場合は、データベースを操作するたびにsql文を実行してしまうのは仕方がありませんが、面倒なのでデータベース内のテーブル、フィールド、行とクラスとの間に1対1のマッピング関係を確立し、オブジェクト指向プログラミングではクラス属性とオブジェクトを使用するため、データベースを直接操作する必要がなく、対応するメソッドを呼び出すだけです。

私が過去に行ったことを例に挙げると理解できると思います。たとえば、ユーザー登録を実装する場合、以前はフロントデスクがデータを取得してバックエンドに渡し、その後バックエンドに渡しました。バックグラウンド文字列が結合されて SQL ステートメントが形成され、バックグラウンドで実行されました。
#ORM
を使用すると、データを含む User オブジェクトをインスタンス化し、そのオブジェクトの save メソッドを呼び出してデータベースに保存するだけで済みます。ユーザーとして操作する必要はありません。 SQL ステートメントのステートメント。
User クラスが users テーブルに対応していると仮定します

user=User(id="100001",name="Andy",password="*****")
user.save()  //保存到数据库
user=User.findById("100001") #从数据库中找出id为"100001"的用户
user.update(password="*********")  #更改id为"100001"的用户密码
users=User.findAll() #取出users表中全部数据
ログイン後にコピー
質問したのですが、このように使うと快適ではないでしょうか?

IO 操作はすべて非同期であり、使用される非同期ライブラリは asyncio です。リンクされたデータベースは mysql 5.7 です。 mysql 非同期 IO ドライバーは、aiomysql の ORM を実装するために必要な準備です


#---データベース操作のカプセル化

Createデータベース接続プール

import asyncioimport aiomysql       
async def create_pool(**kw):global __pool
__pool=await aiomysql.create_pool(
    host=kw.get('host','localhost'),
    port=kw.get('port',3306),
    user=kw['user'],
    password=kw['password'],
    db=kw['db'],
    charset=kw.get('charset','utf8'),
    autocommit=kw.get('autocommit',True), # 自动提交事务
    maxsize=kw.get('maxsize',10),  # 池中最多有10个链接对象
    minsize=kw.get('minsize',1),
)
ログイン後にコピー
クエリの内容を返す select メソッドに加えて、select メソッドをカプセル化します。 、残りの更新。挿入と削除の両方で、影響を受ける行の数を返すだけでよいため、それら 3 つを 1 つの実行メソッドにカプセル化できます

async def select(sql,args,size=None): //size可以决定取几条
global __pool
with (await __pool) as conn:
    cur=await conn.cursor(aiomysql.DictCursor) 
    # 用参数替换而非字符串拼接可以防止sql注入
    await cur.execute(sql.replace('?','%s'),args)  
    if size:
        rs=await cur.fetchmany(size) 
    else:
        rs=await cur.fetchall()  
    await cur.close()
    return rs
ログイン後にコピー

ORM の実装を開始します。

プログラミングには「トップダウン」と呼ばれる考え方があります。したがって、

ORM

の設計方法がわからない場合は、ORM フレームワークがすでに存在すると仮定して、それをどのように使用したいのでしょうか?

def execute(sql,args):
global __pool
try:    
    with (await __pool) as conn:
      cur=await conn.cursor()        
         await cur.execute(sql.replace('?', '%s'), args)
      affected=cur.rowcount
         await cur.close()
except BaseException as e:
    raise e
return affected
ログイン後にコピー
このように User クラスを見ると、それが user テーブルに対応していることが非常に明確であり、このテーブルにどのようなフィールドがあるのか​​が一目瞭然であることに気づきましたか。次に、サブクラスに親クラスを継承させて、find、save... などのメソッドの再利用を実現します。それは完璧ですが、どうやってそれを達成するのでしょうか?

字段类的实现

class Field(object):
  def __init__(self,name,column_type,primary_key,default):  
     self.name=name # 字段名
    self.column_type=column_type # 字段数据类型
    self.primary_key=primary_key  # 是否是主键
    self.default=default  # 有无默认值
  def __str__(self):  
     return &#39;<%s:%s>&#39; % (self.__class__.__name__,self.name)  
   class StringField(Field):
    def __init__(self,name=None,primary_key=False,default=None,ddl=&#39;varchar(100)&#39;): 
      super(StringField,self).__init__(name,ddl,primary_key,default)
  # 其它字段略,一个道理,一个模式
ログイン後にコピー


以上がPython Webサイト開発でどのORMフレームワークが使用されるかを詳しく説明した記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? LinuxターミナルでPythonバージョンを表示するときに発生する権限の問題を解決する方法は? Apr 01, 2025 pm 05:09 PM

LinuxターミナルでPythonバージョンを表示する際の許可の問題の解決策PythonターミナルでPythonバージョンを表示しようとするとき、Pythonを入力してください...

あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? あるデータフレームの列全体を、Python内の異なる構造を持つ別のデータフレームに効率的にコピーする方法は? Apr 01, 2025 pm 11:15 PM

PythonのPandasライブラリを使用する場合、異なる構造を持つ2つのデータフレーム間で列全体をコピーする方法は一般的な問題です。 2つのデータがあるとします...

文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? 文字列を介してオブジェクトを動的に作成し、Pythonでメソッドを呼び出す方法は? Apr 01, 2025 pm 11:18 PM

Pythonでは、文字列を介してオブジェクトを動的に作成し、そのメソッドを呼び出す方法は?これは一般的なプログラミング要件です。特に構成または実行する必要がある場合は...

人気のあるPythonライブラリとその用途は何ですか? 人気のあるPythonライブラリとその用途は何ですか? Mar 21, 2025 pm 06:46 PM

この記事では、numpy、pandas、matplotlib、scikit-learn、tensorflow、django、flask、and requestsなどの人気のあるPythonライブラリについて説明し、科学的コンピューティング、データ分析、視覚化、機械学習、Web開発、Hの使用について説明します。

uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? uvicornは、serving_forever()なしでhttpリクエストをどのように継続的に聞いていますか? Apr 01, 2025 pm 10:51 PM

UvicornはどのようにしてHTTPリクエストを継続的に聞きますか? Uvicornは、ASGIに基づく軽量のWebサーバーです。そのコア機能の1つは、HTTPリクエストを聞いて続行することです...

プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? プロジェクトの基本と問題駆動型の方法で10時間以内にコンピューター初心者プログラミングの基本を教える方法は? Apr 02, 2025 am 07:18 AM

10時間以内にコンピューター初心者プログラミングの基本を教える方法は?コンピューター初心者にプログラミングの知識を教えるのに10時間しかない場合、何を教えることを選びますか...

正規表現とは何ですか? 正規表現とは何ですか? Mar 20, 2025 pm 06:25 PM

正規表現は、プログラミングにおけるパターンマッチングとテキスト操作のための強力なツールであり、さまざまなアプリケーションにわたるテキスト処理の効率を高めます。

See all articles