Flask SQLAlchemy の更新

Salman Mehmood 2023年6月21日
Flask SQLAlchemy の更新

この説明では、Flask アプリで SQLAlchemy データベースを使用して行を挿入および更新する方法を学習します。

Flask アプリで SQLAlchemy データベースを使用して行を更新する

いくつかのフィールドを持つ Employee_Model という単純なモデルがあります。 このモデルに取り組んでいきます。

from datetime import datetime
from flask import Flask
from flask_sqlalchemy import SQLAlchemy


app = Flask(__name__)
app.config["SQLALCHEMY_DATABASE_URI"] = "sqlite:///db.sqlite3"
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = False
db = SQLAlchemy(app)


class Employee_Model(db.Model):
    Employee_ID = db.Column(db.Integer, primary_key=True)
    Employee_Name = db.Column(db.String(50))
    Employee_Email = db.Column(db.String(100), unique=True)
    Date_Field = db.Column(db.Date, default=datetime.utcnow)

    def __repr__(self):
        return f"<Employee_Model: {self.Employee_Email}>"


if __name__ == "__main__":
    app.run(debug=True)

次に、Python シェルを開き、Flask アプリから dbEmployee_Model をインポートします。 次に、db.create_all() を使用してデータベースを作成します。

Employee_Model.query.all() を使用して、データベースに何もないことを示します。

>>> from app import db,Employee_Model
>>> db.create_all()
>>> Employee_Model.query.all()
[]

まず、データを更新する前にデータベースにデータを挿入する必要があります。 これを行うために、Employee_Model モデルをインスタンス化しています。

フィールドを使用してインスタンス化します。 Employee_ID または Date_Field は両方とも自動的に生成できるため、使用していません。

Employee_IDはデータベースによって生成され、Date_Fieldにはデフォルトのdatetime.utcnowが指定されます。 次に、db.session.add() を使用して 1 行のデータを追加し、オブジェクトを渡します。

次に、db.session.commit() を使用してデータをコミットします。これにより、すべてが保存されます。 コマンドEmployee_Model.query.all()を実行すると、データベースに1人の従業員が表示され、日付を持つjack.Date_Fieldを使用してDate_Fieldオブジェクトが表示されます。

>>> jack=Employee_Model(Employee_Name='jack',Employee_Email='jack@something.com')
>>> db.session.add(jack)
>>> db.session.commit()
>>> Employee_Model.query.all()
[<Employee: jack@something.com>]
>>> jack.Date_Field
datetime.date(2022, 7, 14)

デフォルトの日付を使用したくない場合は、手動で行うことができます。 これを行うには、datetime から日付をインポートし、オブジェクト名 laura で新しい従業員を作成できます。

Employee_Model() クラスに電子メールで名前を指定し、Date_Field を渡します。

ここで、データベース内に laura オブジェクトを追加して、データベースに保存する必要があります。 データベースからクエリを抽出すると、データベースに 2 人の従業員が表示されます。

>>> from datetime import date
>>> from app import db,Employee_Model
>>>laura=Employee_Model(Employee_Name='laura',Employee_Email='laura@something.com',Date_Field=date(2022,7,14))
>>> db.session.add(laura)
>>> db.session.commit()
>>> Employee_Model.query.all()
[<Employee: jack@something.com>, <Employee: laura@something.com>]

ここで、特定のものについてデータベース内のデータを更新します。 jack オブジェクトを照会したいとします。

これを行うには、filter_by(Employee_Name='jack') を使用して jack オブジェクトをフィルタリングします。これは、jack という名前の行を探していることを意味します。 最初の結果を取得したいので、それは一意でなければなりません。

ここで、代入演算子を使用して Employee_Email フィールドを更新し、それをコミットして、更新されたレコードをデータベースに保存します。 クエリを実行してデータベース内のすべてのユーザーを取得すると、jack@something.com ではなく jack123@something.com が表示されます。

>>> from app import db,Employee_Model
>>> jack=Employee_Model.query.filter_by(Employee_Name='jack').first()
>>> jack
<Employee: jack@something.com>
>>> jack.Employee_Email='jack123@something.com'
>>> db.session.commit()
>>> Employee_Model.query.all()
[<Employee: jack123@something.com>, <Employee: laura@something.com>]
>>> jack.Employee_Email
'jack123@something.com'
著者: Salman Mehmood
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn

関連記事 - Flask SQLAlchemy