SAP Spartacus 預設路由配置的工作原理
阿新 • • 發佈:2021-07-10
Flask-SQLAlchemy 使用起來非常有趣,對於基本應用十分容易使用,並且對於大型專案易於擴充套件。
官方文件:https://flask-sqlalchemy.palletsprojects.com/en/2.x/
中文文件:http://www.pythondoc.com/flask-sqlalchemy/
安裝
pip install flask-sqlalchemy
配置
配置選項 | 說明 |
SQLALCHEMY_DATABASE_URI |
連線資料庫。示例:mysql://username:password@host/post/db?charset=utf-8 |
SQLALCHEMY_BINDS |
一個將會繫結多種資料庫的字典。 更多詳細資訊請看官文 |
|
除錯設定為true |
|
資料庫池的大小,預設值為5。 |
|
連線超時時間 |
SQLALCHEMY_POOL_RECYCLE |
自動回收連線的秒數。 |
SQLALCHEMY_MAX_OVERFLOW |
控制在連線池達到最大值後可以建立的連線數。當這些額外的連接回收到連線池後將會被斷開和拋棄。 |
|
如果設定成 True (預設情況),Flask-SQLAlchemy 將會追蹤物件的修改並且傳送訊號。這需要額外的記憶體, 如果不必要的可以禁用它。 |
建立及查詢
from flask import Flask from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:tmp/test.db' db = SQLAlchemy(app) class User(db.Model): id = db.Column(db.Integer, primary_key=True) username = db.Column(db.String(80), unique=True) email = db.Column(db.String(120), unique=True) def __init__(self, username, email): self.username = username self.email = email def __repr__(self): return '<User %r>' % self.username if __name__ == '__main__': # 建立初始資料 db.create_all() # 建立一些使用者 admin = User('admin', '[email protected]') guest = User('guest', '[email protected]') # 寫入到資料庫 db.session.add(admin) db.session.add(guest) db.session.commit() # 訪問資料庫 users = User.query.all() admin = User.query.filter_by(username='admin').first() print(users) print(admin)
結果:
[<User 'admin'>, <User 'guest'>] <User 'admin'>
表關聯
SQLAlchemy 連線到關係型資料庫,關係型資料最擅長的東西就是關聯。因此,我們將建立一個使用兩張相互關聯的表的應用作為例子:
from flask import Flask from flask_sqlalchemy import SQLAlchemy from datetime import datetime app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:tmp/test.db' db = SQLAlchemy(app) class Post(db.Model): id = db.Column(db.Integer, primary_key=True) title = db.Column(db.String(80), nullable=False) body = db.Column(db.Text, nullable=False) pub_date = db.Column(db.DateTime, nullable=False, default=datetime.utcnow) category_id = db.Column(db.Integer, db.ForeignKey('category.id'), # 外來鍵 nullable=False) # 與生成表結構無關,僅用於查詢方便 # backref 標示可通過relationship反向查詢,Category.posts查詢Post表資料 category = db.relationship('Category', backref=db.backref('posts', lazy=True)) def __repr__(self): return '<Post %r>' % self.title class Category(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50), nullable=False) def __repr__(self): return '<Category %r>' % self.name if __name__ == '__main__': # 建立一些物件 py = Category(name='Python') Post(title='Hello Python!', body='Python is pretty cool', category=py) p = Post(title='Snakes', body='Ssssssss') py.posts.append(p) db.session.add(py) # 現在因為我們在 backref 中聲明瞭 posts 作為動態關係,查詢顯示為: print(py.posts)
執行結果:
[<Post 'Hello Python!'>, <Post 'Snakes'>]更多資料庫的增刪改查等功能參考官方文件:https://flask-sqlalchemy.palletsprojects.com/en/2.x/queries/ 天道酬勤 循序漸進 技壓群雄