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 アプリから db
と Employee_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'
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