Python Webサイト開発でどのORMフレームワークが使用されるかを詳しく説明した記事
前回の記事では、Python に関する知識を多少なりとも紹介しましたが、実際の戦闘では Python 開発ページ を使用する必要があります。フレームワーク開発ページ が最もシンプルで簡単です。この章では、Python ページ開発の 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),
)
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
字段类的实现
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 '<%s:%s>' % (self.__class__.__name__,self.name) class StringField(Field): def __init__(self,name=None,primary_key=False,default=None,ddl='varchar(100)'): super(StringField,self).__init__(name,ddl,primary_key,default) # 其它字段略,一个道理,一个模式
以上がPython Webサイト開発でどのORMフレームワークが使用されるかを詳しく説明した記事の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

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

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

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

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

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

ホットトピック









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

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

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

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

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

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

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