1. 程式人生 > 資訊 >韓媒:三星電子將在年內投入 152 億韓元用於 AI、半導體等研發

韓媒:三星電子將在年內投入 152 億韓元用於 AI、半導體等研發

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 一個將會繫結多種資料庫的字典。 更多詳細資訊請看官文
繫結多種資料庫
.

SQLALCHEMY_ECHO

除錯設定為true

SQLALCHEMY_POOL_SIZE

資料庫池的大小,預設值為5。

SQLALCHEMY_POOL_TIMEOUT

連線超時時間
SQLALCHEMY_POOL_RECYCLE 自動回收連線的秒數。
SQLALCHEMY_MAX_OVERFLOW 控制在連線池達到最大值後可以建立的連線數。當這些額外的連接回收到連線池後將會被斷開和拋棄。

SQLALCHEMY_TRACK_MODIFICATIONS
如果

如果設定成 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/ 天道酬勤 循序漸進 技壓群雄