データベースに記事を保存するためのテーブルを作成しましょう。テーブル名は「entry」とし、id、title、contentという3つのカラムを持ちます。
まず、設定ファイルであるconfig.pyを作成します。
DEBUG = True
#dialect+driver://username:password@host:port/database
DB_TYPE = 'mysql'
DB_DRIVER='pymysql'
DB_USER = 'root'
DB_PASS = '1q2w3e4r5t'
DB_HOST = '127.0.0.1'
DB_PORT = 3306
DB_NAME = 'db_demo1'
SQLALCHEMY_DATABASE_URI = "{}+{}://{}:{}@{}:{}/{}?charset=utf8".format(DB_TYPE,DB_DRIVER,DB_USER,DB_PASS,DB_HOST,DB_PORT,DB_NAME)
SQLALCHEMY_TRACK_MODIFICATIONS = False
print(SQLALCHEMY_DATABASE_URI)
Flaskアプリケーション内でEntryというクラスを新規作成し、id、title、contentを定義します。db.create_all()を実行すると、データベースに自動的にテーブルが作成されます(テーブル名はentry)。
from flask import Flask
import config
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.ext.declarative import declarative_base
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
Base = declarative_base()
class Entry(db.Model):
__tablename__ = 'entry'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(100), nullable=False)
content = db.Column(db.Text, nullable=True)
db.create_all()
@app.route('/')
def index():
return 'index'
if __name__ == '__main__':
app.run(debug=True)
Flaskアプリケーションを起動後、データベースでテーブルとその構造を確認すると、新しいテーブルが正常に作成されていることがわかります。
データベーステーブルに対するCRUD操作(作成、読み取り、更新、削除)の実装例:
#作成(Create)
new_entry = Entry(title="初めての投稿", content="これは私の最初の投稿です")
db.session.add(new_entry)
db.session.commit()
#読み取り(Read)
result = Entry.query.filter(Entry.title=="初めての投稿").first()
print(result.title)
#更新(Update)
entry_to_update = Entry.query.filter(Entry.title=="初めての投稿").first()
entry_to_update.title = "更新された最初の投稿"
db.session.commit()
#削除(Delete)
entry_to_delete = Entry.query.filter(Entry.title=="更新された最初の投稿").first()
db.session.delete(entry_to_delete)
db.session.commit()
完全なアプリケーションコード例:
from flask import Flask
import config
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.ext.declarative import declarative_base
app = Flask(__name__)
app.config.from_object(config)
db = SQLAlchemy(app)
Base = declarative_base()
class Entry(db.Model):
__tablename__ = 'entry'
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
title = db.Column(db.String(100), nullable=False)
content = db.Column(db.Text, nullable=True)
db.create_all()
@app.route('/')
def index():
#作成(Create)
new_entry = Entry(title="最初のエントリ", content="これは私の最初のエントリです")
db.session.add(new_entry)
db.session.commit()
#読み取り(Read)
result = Entry.query.filter(Entry.title=="最初のエントリ").first()
print(result.title)
#更新(Update)
entry_to_update = Entry.query.filter(Entry.title=="最初のエントリ").first()
entry_to_update.title = "更新された最初のエントリ"
db.session.commit()
#削除(Delete)
entry_to_delete = Entry.query.filter(Entry.title=="更新された最初のエントリ").first()
db.session.delete(entry_to_delete)
db.session.commit()
return 'index'
if __name__ == '__main__':
app.run(debug=True)