以下の内容はhttps://dk521123.hatenablog.com/entry/2018/09/19/223200より取得しました。


【Python】Flask ~ SQLAlchemy / 入門編 ~

■ はじめに

https://dk521123.hatenablog.com/entry/2018/09/18/220600

の続き。

今回は、SQLAlchemyを使う

【1】SQLAlchemy とは?

* Alchemy (アルケミー) = 錬金術
* PythonのORM(Object-Relational Mapping)

1)利点

 * SQLインジェクションを考慮している

【2】環境設定

# 以下のコマンドを実行
pip install flask-sqlalchemy

【3】サンプル

main.py

#!/usr/bin/env python
# -*- coding: UTF-8 -*-

from flask import Flask, render_template
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql+pymysql://root:password@localhost/sample_db?charset=utf8"
db = SQLAlchemy(app)

class Person(db.Model):
  __tablename__ = "person"
  id = db.Column(db.BigInteger, primary_key=True, autoincrement=True)
  name = db.Column(db.Text())
  
@app.route("/")
def selectAll():

  people = Person.query.all()
  return render_template("sqlalchemy-sample.html", person_vals = people)

@app.route("/add/<string:name>")
def addNew(name):

  # データ追加
  person = Person()
  person.name = name
  db.session.add(person)
  db.session.commit()

  people = Person.query.all()
  return render_template("sqlalchemy-sample.html", person_vals = people)

@app.route("/update/<int:id>")
def update(id):

  # データ修正
  person = Person.query.get(id)
  person.name = "Ada"
  db.session.commit()

  people = Person.query.all()
  return render_template("sqlalchemy-sample.html", person_vals = people)

@app.route("/delete/<int:id>")
def delete(id):

  # データ削除
  person = Person.query.get(id)
  db.session.delete(person)
  db.session.commit()

  people = Person.query.all()
  return render_template("sqlalchemy-sample.html", person_vals = people)

if __name__ == "__main__":
  app.run()
templates/sqlalchemy-sample.html

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>Flask - Demo</title>
</head>
<body>
<h1>Sample</h1>
{% for person in person_vals: %}
  <p>[{{ person.id }}] Hello, {{ person.name }}!!!</p>
{% endfor %}
</body>
</html>

実行コマンド

python main.py

動作確認

* ブラウザで以下にアクセスする

http://localhost:5000

 * データ追加は、以下。

http://localhost:5000/add/John

 * データ修正は、以下。

http://localhost:5000/update/2

 * データ削除は、以下。

http://localhost:5000/delete/3

【4】SQLAlchemy あれこれ

1)IDなどで絞り込む

get() を使う

main.py

person = Person.query.get(2)
return render_template("sqlalchemy-sample.html", person_val = person)

# templates/sqlalchemy-sample.html
<p>[{{ person_val.id }}] Hello, {{ person_val.name }}!!!</p>

2)条件を絞る

* filter() を使う

main.py

people = Person.query.filter(Person.id > 2).all()

3)出力データ数を限定する

* limit() を使う

main.py

# 3までデータを出力する
people = Person.query.limit(3).all()

関連記事

Flask ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2018/09/11/021900
Flask ~ DB接続 ~
https://dk521123.hatenablog.com/entry/2018/09/18/220600
Flask ~ SQLAlchemy / 基本編 ~
https://dk521123.hatenablog.com/entry/2018/09/23/165130
Python ORM ~ SQLAlchemy / 入門編 ~
https://dk521123.hatenablog.com/entry/2025/10/07/133808
Python ORM ~ SQLAlchemy / 基本編 ~
https://dk521123.hatenablog.com/entry/2025/10/10/013250




以上の内容はhttps://dk521123.hatenablog.com/entry/2018/09/19/223200より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14