目次
最初のパラメータ: flask Application example
2 番目のパラメータ: データベース接続 URI
Turnプログラムの実行効率を向上させるために SQLALCHEMY_TRACK_MODIFICATIONS オプションをオフにします
db オブジェクトを初期化します
SQLAlchemy ORM design model
ホームページ バックエンド開発 Python チュートリアル Python での ORM フレームワーク Flask-SQLAlchemy の実践

Python での ORM フレームワーク Flask-SQLAlchemy の実践

Jun 10, 2023 pm 10:57 PM
python オームフレームワーク flask-sqlalchemy

ORM (オブジェクト リレーショナル マッピング) は、リレーショナル データベースのテーブル データをプログラミング言語のオブジェクトにマッピングするプログラミング テクノロジで、プログラム開発者がオブジェクト指向の方法でデータベースを操作できるようにします。 Flask-SQLAlchemy は、リレーショナル データベースでの Python プログラムの操作を大幅に簡素化できる強力な ORM フレームワークです。

この記事では、Flask-SQLAlchemy フレームワークの使用法を例を通して詳しく紹介します。

  1. 環境構成

Flask-SQLAlchemy を学習する前に、まず Flask と SQLAlchemy モジュールをインストールする必要があります。 Python 環境で pip コマンドを使用してインストールできます。

pip install Flask
pip install SQLAlchemy

  1. データベース構成

Flask を作成する前に、プロジェクトの永続ストレージとして MySQL データベースを構成します。 -SQLAlchemy オブジェクト、次のパラメータを渡すだけです:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

最初のパラメータ: flask Application example

2 番目のパラメータ: データベース接続 URI

app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://root:password@localhost:3306/test'

Turnプログラムの実行効率を向上させるために SQLALCHEMY_TRACK_MODIFICATIONS オプションをオフにします

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db オブジェクトを初期化します

db = SQLAlchemy(app)

app.config を呼び出して、Flask アプリケーション インスタンスの構成パラメーターを設定します。SQLALCHEMY_DATABASE_URI パラメーターは、接続されたデータベースの種類、ユーザー名、パスワード、IP アドレス、ポート番号、データベース名、およびその他の情報を指定するために使用されます。

  1. ORM 実装

データ モデルの定義

まず、ORM のマッピング オブジェクトであるデータ モデルを定義する必要があります。学生情報を例として、Student クラスを定義します。

from datetime import datetime
from flask_sqlalchemy import SQLAlchemy

db = SQLAlchemy()

SQLAlchemy ORM design model

class Student(db.Model):

# 定义表名
__tablename__ = 'student'
# 定义表结构,其中id为主键,自增长
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
name = db.Column(db.String(20), nullable=False)
gender = db.Column(db.String(2), nullable=False)
birthday = db.Column(db.Date, default=datetime.now())
address = db.Column(db.String(200), nullable=False)

# 类对象序列化成字典
def to_dict(self):
    return {c.name: getattr(self, c.name, None) for c in self.__table__.columns}
ログイン後にコピー

Student クラスでは、__tablename__、id、名前、性別、誕生日、住所のテーブル構造を定義します。このうち、__tablename__ はテーブル名を指定するために使用され、id は主キーを指定して自動的に拡張するために使用され、フィールド名、性別、誕生日、住所は生徒の名前、性別、誕生日、住所に関する情報を格納するために使用されます。住所。

#追加、削除、変更、およびクエリの操作

次に、追加、削除、変更、およびクエリの操作を実装します。

(1) 学生情報の追加

@app.route(' /add',messages=['POST'])

def add_student():

student = Student()
student.name = request.form.get('name')
student.gender = request.form.get('gender')
student.birthday = datetime.strptime(request.form.get('birthday'), '%Y-%m-%d').date()
student.address = request.form.get('address')
db.session.add(student)
db.session.commit()
return jsonify({'code': 200, 'msg': 'add student success.'})
ログイン後にコピー

まず、request.form.get() を通じて送信されたフォーム データを取得します。次に Student オブジェクトを作成して属性値を設定し、最後に db.session.add() を使用してオブジェクトをデータベースに追加し、db.session.commit() を使用してトランザクションをコミットします。

(2) 学生情報の削除

@app.route('/delete/<int:id>',methods=['DELETE'])

def delete_student(id ):

student = Student.query.get(id)
if student:
    db.session.delete(student)
    db.session.commit()
    return jsonify({'code': 200, 'msg': 'delete student success.'})
else:
    return jsonify({'code': 404, 'msg': 'student not found.'})
ログイン後にコピー

学生 ID パラメータを渡し、query.get() メソッドを通じて学生インスタンスを取得し、db.session.delete() メソッドを使用してそれをデータベースから削除し、 db.session .commit() を介してデータベースがトランザクションをコミットします。

(3) 学生情報の変更

@app.route('/update/<int:id>',methods=['PUT'])

def update_student(id ):

student = Student.query.get(id)
if student:
    student.name = request.form.get('name')
    student.gender = request.form.get('gender')
    student.birthday = datetime.strptime(request.form.get('birthday'), '%Y-%m-%d').date()
    student.address = request.form.get('address')
    db.session.commit()
    return jsonify({'code': 200, 'msg': 'update student success.'})
else:
    return jsonify({'code': 404, 'msg': 'student not found.'})
ログイン後にコピー

同様に、学生 ID パラメータに基づいて学生インスタンスを取得し、学生情報を変更した後、db.session.commit() を使用してトランザクションを送信します。

(4) 学生情報のクエリ

@app.route('/search')

def search_student():

students = Student.query.all()
if students:
    return jsonify({'code': 200, 'msg': 'search student success.', 'data': [student.to_dict() for student in students]})
else:
    return jsonify({'code': 404, 'msg': 'student not found.'})
ログイン後にコピー
query.all()メソッドを使用Student テーブル内のすべての学生情報をクエリし、リスト内包表記を使用して Student オブジェクトのリストを辞書リストに変換して返します。

    概要
Flask-SQLAlchemy は、データベース操作用の Python コードをよりシンプルで読みやすくできる非常に強力な ORM フレームワークです。この記事では、例を通じて Flask-SQLAlchemy の使用方法を詳しく紹介します。

実際の開発では、この記事と同様の方法でデータ モデルを定義し、追加、削除、変更、クエリ操作を実装できます。これらの操作の複雑さは非常に低く、Flask-SQLAlchemy フレームワークを使用することで、開発効率が向上し、プログラムのメンテナンス コストが削減されます。

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

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

ホットな記事タグ

メモ帳++7.3.1

メモ帳++7.3.1

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

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

テンプレートのメリットとデメリットは何ですか? テンプレートのメリットとデメリットは何ですか? May 08, 2024 pm 03:51 PM

テンプレートのメリットとデメリットは何ですか?

Google AI、開発者向けに Gemini 1.5 Pro と Gemma 2 を発表 Google AI、開発者向けに Gemini 1.5 Pro と Gemma 2 を発表 Jul 01, 2024 am 07:22 AM

Google AI、開発者向けに Gemini 1.5 Pro と Gemma 2 を発表

Deepseek Xiaomiをダウンロードする方法 Deepseek Xiaomiをダウンロードする方法 Feb 19, 2025 pm 05:27 PM

Deepseek Xiaomiをダウンロードする方法

わずか 250 ドルで、Hugging Face のテクニカル ディレクターが Llama 3 を段階的に微調整する方法を教えます わずか 250 ドルで、Hugging Face のテクニカル ディレクターが Llama 3 を段階的に微調整する方法を教えます May 06, 2024 pm 03:52 PM

わずか 250 ドルで、Hugging Face のテクニカル ディレクターが Llama 3 を段階的に微調整する方法を教えます

いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する May 06, 2024 pm 04:43 PM

いくつかの .NET オープンソース AI および LLM 関連プロジェクト フレームワークを共有する

golang 関数のデバッグと分析の完全ガイド golang 関数のデバッグと分析の完全ガイド May 06, 2024 pm 02:00 PM

golang 関数のデバッグと分析の完全ガイド

どうやって彼にdeepseekに尋ねますか どうやって彼にdeepseekに尋ねますか Feb 19, 2025 pm 04:42 PM

どうやって彼にdeepseekに尋ねますか

評価関数の保存方法 評価関数の保存方法 May 07, 2024 am 01:09 AM

評価関数の保存方法

See all articles