SQL を使用するための非常に便利な Python アーティファクトです。
背景
実は最初はpymysqlを使っていたのですが、メンテナンスが面倒でコードインジェクションのリスクもあったため、単純にORMを使っていました。フレームワークを直接。
ORMとはObject Relational Mapperのことで、簡単に言うとデータベースのテーブルとPythonのクラスとのマッピングであり、Pythonのクラスを操作することで間接的にデータベースを操作することができます。
より有名な Python ORM フレームワークは、SQLAlchemy と Peewee です。ここでは比較はしませんが、SQLAlchemy の個人的な使用法について簡単に説明します。友人全員の役に立つことを願っています。
- sqlalchemy バージョン: 1.3.15
- pymysql バージョン: 0.9.3
- mysql バージョン: 5.7
初期化作業
一般に、ORM フレームワークを使用する場合、データベース接続、基本的なマッピングの定義など、いくつかの初期化作業が必要になります。
MySQL を例に挙げると、データベース接続を作成するには、DSN 文字列を渡すだけで済みます。エコーは、対応する SQL ステートメントを出力するかどうかを示し、デバッグに役立ちます。
from sqlalchemy import create_engine engine = create_engine('mysql+pymysql://$user:$password@$host:$port/$db?charset=utf8mb4', echo=True)
個人的なデザイン
私個人としては、ORM フレームワークを導入するときに、私のプロジェクトでは次のデザインの MVC パターンを参照します。このうち、model にはいくつかのデータベース モデル、つまりデータベース テーブルにマッピングされた Python クラスが格納され、model_op には各モデルに対応する操作 (追加、削除、確認、変更) が格納され、呼び出し元 (main.py など) が実行されるときに、データベース操作を実行する場合、model_op 層を呼び出すだけで済みます。分離を実現するためにモデル層を気にする必要はありません。
├── main.py ├── model │ ├── __init__.py │ ├── base_model.py │ ├── ddl.sql │ └── py_orm_model.py └── model_op ├── __init__.py └── py_orm_model_op.py
マッピング ステートメント (モデルの紹介)
たとえば、このようなテスト テーブルがあるとします。
create table py_orm ( `id` int(11) NOT NULL AUTO_INCREMENT COMMENT '唯一id', `name` varchar(255) NOT NULL DEFAULT '' COMMENT '名称', `attr` JSON NOT NULL COMMENT '属性', `ct` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间', `ut` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON update CURRENT_TIMESTAMP COMMENT '更新时间', PRIMARY KEY(`id`) )ENGINE=InnoDB COMMENT '测试表';
ORM フレームワークでは、マッピング結果は以下の Python クラスになります。
# py_orm_model.py from .base_model import Base from sqlalchemy import Column, Integer, String, TIMESTAMP, text, JSON class PyOrmModel(Base): __tablename__ = 'py_orm' id = Column(Integer, autoincrement=True, primary_key=True, comment='唯一id') name = Column(String(255), nullable=False, default='', comment='名称') attr = Column(JSON, nullable=False, comment='属性') ct = Column(TIMESTAMP, nullable=False, server_default=text('CURRENT_TIMESTAMP'), comment='创建时间') ut = Column(TIMESTAMP, nullable=False, server_default=text('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'), comment='更新时间')
まず第一に、PyOrmModel が Base クラスを継承していることがわかります。これは、sqlalchemy によって提供される基本クラスです。これは、宣言した Python クラスに対していくつかのチェックを実行し、それをbase_model に置きます。
# base_model.py # 一般base_model做的都是一些初始化的工作 from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base Base = declarative_base() engine = create_engine("mysql+pymysql://root:123456@127.0.0.1:33306/orm_test?charset=utf8mb4", echo=False)
第二に、各 Python クラスには __tablename__ 属性が含まれている必要があります。そうでないと、対応するテーブルが見つかりません。
3 番目に、データ テーブルを作成するには 2 つの方法があります。1 つ目は、MySQL で手動で作成する方法です。Python クラスの定義に問題がない限り、正常に動作します。2 つ目は、MySQL で手動で作成する方法です。以下のような ORM Frame 作成を使用することです。
# main.py # 注意这里的导入路径,Base创建表时会寻找继承它的子类,如果路径不对,则无法创建成功 from sqlachlemy_lab import Base, engine if __name__ == '__main__': Base.metadata.create_all(engine)
作成効果:
... 2020-04-04 10:12:53,974 INFO sqlalchemy.engine.base.Engine CREATE TABLE py_orm ( id INTEGER NOT NULL AUTO_INCREMENT, name VARCHAR(255) NOT NULL DEFAULT '' COMMENT '名称', attr JSON NOT NULL COMMENT '属性', ct TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, ut TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, PRIMARY KEY (id) )
4 番目、フィールド属性について:
1.primary_key と autoincrement は理解しやすいです。これらは MySQL の主キーと増分属性です。
2. int 型の場合は長さを指定する必要はありませんが、varchar 型の場合は長さを指定する必要があります。
3.nullable は、MySQL の NULL と NOT NULL に対応します。
4.default と server_default について:default は、ORM フレームワーク レベルでのデフォルト値を表します。つまり、フィールドが挿入される場合に、 Inserting 値が割り当てられていない場合は、定義したデフォルト値が使用されます。server_default はデータベース レベルのデフォルト値を表し、これは DDL ステートメントのデフォルトのキーワードです。
セッションの紹介
SQLAlchemy ドキュメントには、データベースの追加、削除、変更がセッションを通じて実行されると記載されています。
>>> from sqlalchemy.orm import sessionmaker >>> Session = sessionmaker(bind=engine) >>> session = Session() >>> orm = PyOrmModel(id=1, name='test', attr={}) >>> session.add(orm) >>> session.commit() >>> session.close()
上記のように、操作ごとにセッションを取得、送信、解放する必要があることがわかります。これは冗長で面倒なので、通常はカプセル化の層を実行します。
1. コンテキスト マネージャーを使用して、セッションの異常なロールバックと終了を処理します。この部分は参照記事とほぼ一致しています。
# base_model.py from contextlib import contextmanager from sqlalchemy.orm import sessionmaker, scoped_session def _get_session(): """获取session""" return scoped_session(sessionmaker(bind=engine, expire_on_commit=False))() # 在这里对session进行统一管理,包括获取,提交,回滚和关闭 @contextmanager def db_session(commit=True): session = _get_session() try: yield session if commit: session.commit() except Exception as e: session.rollback() raise e finally: if session: session.close()
2.モデルと辞書間の変換のために 2 つのメソッドを PyOrmModel に追加します。
class PyOrmModel(Base): ... @staticmethod def fields(): return ['id', 'name', 'attr'] @staticmethod def to_json(model): fields = PyOrmModel.fields() json_data = {} for field in fields: json_data[field] = model.__getattribute__(field) return json_data @staticmethod def from_json(data: dict): fields = PyOrmModel.fields() model = PyOrmModel() for field in fields: if field in data: model.__setattr__(field, data[field]) return model
3. データベース操作のカプセル化 参考記事とは異なり、セッションを直接呼び出したので、呼び出し側がモデル層を意識する必要がなく、結合が軽減されます。
# py_orm_model_op.py from sqlachlemy_lab.model import db_session from sqlachlemy_lab.model import PyOrmModel class PyOrmModelOp: def __init__(self): pass @staticmethod def save_data(data: dict): with db_session() as session: model = PyOrmModel.from_json(data) session.add(model) # 查询操作,不需要commit @staticmethod def query_data(pid: int): data_list = [] with db_session(commit=False) as session: data = session.query(PyOrmModel).filter(PyOrmModel.id == pid) for d in data: data_list.append(PyOrmModel.to_json(d)) return data_list
4.発信者:
# main.py from sqlachlemy_lab.model_op import PyOrmModelOp if __name__ == '__main__': PyOrmModelOp.save_data({'id': 1, 'name': 'test', 'attr': {}})
以上がSQL を使用するための非常に便利な Python アーティファクトです。の詳細内容です。詳細については、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)

ホットトピック









PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

Pytorch GPUアクセラレーションを有効にすることで、CentOSシステムでは、PytorchのCUDA、CUDNN、およびGPUバージョンのインストールが必要です。次の手順では、プロセスをガイドします。CUDAおよびCUDNNのインストールでは、CUDAバージョンの互換性が決定されます。NVIDIA-SMIコマンドを使用して、NVIDIAグラフィックスカードでサポートされているCUDAバージョンを表示します。たとえば、MX450グラフィックカードはCUDA11.1以上をサポートする場合があります。 cudatoolkitのダウンロードとインストール:nvidiacudatoolkitの公式Webサイトにアクセスし、グラフィックカードでサポートされている最高のCUDAバージョンに従って、対応するバージョンをダウンロードしてインストールします。 cudnnライブラリをインストールする:

DockerはLinuxカーネル機能を使用して、効率的で孤立したアプリケーションランニング環境を提供します。その作業原則は次のとおりです。1。ミラーは、アプリケーションを実行するために必要なすべてを含む読み取り専用テンプレートとして使用されます。 2。ユニオンファイルシステム(UnionFS)は、違いを保存するだけで、スペースを節約し、高速化する複数のファイルシステムをスタックします。 3.デーモンはミラーとコンテナを管理し、クライアントはそれらをインタラクションに使用します。 4。名前空間とcgroupsは、コンテナの分離とリソースの制限を実装します。 5.複数のネットワークモードは、コンテナの相互接続をサポートします。これらのコア概念を理解することによってのみ、Dockerをよりよく利用できます。

PythonとJavaScriptには、コミュニティ、ライブラリ、リソースの観点から、独自の利点と短所があります。 1)Pythonコミュニティはフレンドリーで初心者に適していますが、フロントエンドの開発リソースはJavaScriptほど豊富ではありません。 2)Pythonはデータサイエンスおよび機械学習ライブラリで強力ですが、JavaScriptはフロントエンド開発ライブラリとフレームワークで優れています。 3)どちらも豊富な学習リソースを持っていますが、Pythonは公式文書から始めるのに適していますが、JavaScriptはMDNWebDocsにより優れています。選択は、プロジェクトのニーズと個人的な関心に基づいている必要があります。

Pytorchの分散トレーニングでは、Centosシステムでトレーニングには次の手順が必要です。Pytorchのインストール:PythonとPipがCentosシステムにインストールされていることです。 CUDAバージョンに応じて、Pytorchの公式Webサイトから適切なインストールコマンドを入手してください。 CPUのみのトレーニングには、次のコマンドを使用できます。PipinstalltorchtorchtorchvisionTorchaudioGPUサポートが必要な場合は、CUDAとCUDNNの対応するバージョンがインストールされ、インストールに対応するPytorchバージョンを使用してください。分散環境構成:分散トレーニングには、通常、複数のマシンまたは単一マシンの複数GPUが必要です。場所

NGINXのインストールをインストールするには、次の手順に従う必要があります。開発ツール、PCRE-Devel、OpenSSL-Develなどの依存関係のインストール。 nginxソースコードパッケージをダウンロードし、それを解凍してコンパイルしてインストールし、/usr/local/nginxとしてインストールパスを指定します。 nginxユーザーとユーザーグループを作成し、アクセス許可を設定します。構成ファイルnginx.confを変更し、リスニングポートとドメイン名/IPアドレスを構成します。 nginxサービスを開始します。依存関係の問題、ポート競合、構成ファイルエラーなど、一般的なエラーに注意する必要があります。パフォーマンスの最適化は、キャッシュをオンにしたり、ワーカープロセスの数を調整するなど、特定の状況に応じて調整する必要があります。

PytorchをCentosシステムにインストールする場合、適切なバージョンを慎重に選択し、次の重要な要因を検討する必要があります。1。システム環境互換性:オペレーティングシステム:Centos7以上を使用することをお勧めします。 Cuda and Cudnn:PytorchバージョンとCudaバージョンは密接に関連しています。たとえば、pytorch1.9.0にはcuda11.1が必要ですが、pytorch2.0.1にはcuda11.3が必要です。 CUDNNバージョンは、CUDAバージョンとも一致する必要があります。 Pytorchバージョンを選択する前に、互換性のあるCUDAおよびCUDNNバージョンがインストールされていることを確認してください。 Pythonバージョン:Pytorch公式支店

Pythonは、自動化、スクリプト、およびタスク管理に優れています。 1)自動化:OSやShutilなどの標準ライブラリを介してファイルバックアップが実現されます。 2)スクリプトの書き込み:Psutilライブラリを使用してシステムリソースを監視します。 3)タスク管理:スケジュールライブラリを使用してタスクをスケジュールします。 Pythonの使いやすさと豊富なライブラリサポートにより、これらの分野で優先ツールになります。
