隨著互聯網的快速發展,Web應用程序已經成為人們最為熟悉的應用程序之一。而Flask是Python中一個輕量級的Web框架,它的簡潔性和易擴展性使得它成為了開發Web應用程序的重要工具之一。在Flask開發中,連接資料庫是一個必不可少的環節。本文將從多個方面對Flask連接資料庫做詳細的闡述。
一、Flask連接資料庫並可視化
在Flask中,我們可以使用多種資料庫,比如SQLite、MySQL和PostgreSQL等。下面,我們以SQLite為例,對Flask連接資料庫進行講解。
首先,需要通過pip安裝相關依賴庫。比如,在Windows下安裝SQLite3:
!pip install sqlite3
接下來,我們需要在Flask應用程序中配置資料庫。具體代碼如下:
from flask import Flask, abort, request, jsonify
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
上述代碼中,我們首先導入了Flask庫和SQLAlchemy庫。然後,我們創建了一個app對象和一個db對象。最後,我們配置了資料庫連接的URI和關閉了在資料庫修改時發送信號到應用程序的跟蹤功能。具體地,’sqlite:///test.db’表示連接到名為test的SQLite資料庫。需要注意的是,這個test.db文件會被存儲在當前文件夾中。
接下來,我們可以用db對象定義模型,定義之後我們就可以像sqlalchemy一樣使用增、刪、改、查等操作。定義模型的代碼如下:
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(20), nullable=False)
email = db.Column(db.String(50), nullable=False)
def to_dict(self):
return {
'id': self.id,
'name': self.name,
'email': self.email
}
上述代碼中,我們定義了一個User模型,包括id、name和email三個屬性。其中,id為整型,為主鍵;name和email為字元串類型,不能為空。另外,我們還定義了一個to_dict函數,用於將模型數據轉換成字典格式。
最後,我們需要將模型應用到資料庫中。具體代碼如下:
@app.route('/user', methods=['POST'])
def create_user():
name = request.json.get('name')
email = request.json.get('email')
if not name or not email:
abort(400)
user = User(name=name, email=email)
db.session.add(user)
db.session.commit()
return jsonify(user.to_dict()), 201
上述代碼中,我們使用POST方法請求應用路由’/user’,並將用戶名和郵箱地址傳遞到函數中。如果用戶名或郵箱為空,就會返回狀態碼400;否則,將用戶名和郵箱地址注入到User模型中,並用add和commit方法將其添加到資料庫中。
至此,我們已經成功地連接了SQLite資料庫,並實現了數據增加功能。
二、Flask資料庫遷移
在Flask的Web應用程序開發中,當我們需要對我們的資料庫進行結構變更時,Flask提供了一個叫做Flask-Migrate的庫,可以方便地進行資料庫遷移。Flask-Migrate的簡單使用步驟如下:
1、安裝Flask-Migrate
!pip install flask-migrate
2、初始化資料庫遷移環境
flask db init
3、生成遷移腳本
flask db migrate -m "add fields to user model"
4、應用遷移腳本
flask db upgrade
5、回滾遷移
flask db downgrade
上述步驟中,我們使用了Flask-Migrate提供的命令行工具,簡單完成了資料庫遷移的操作。
三、Flask鏈接資料庫失敗重試
在Flask開發中,由於網路或伺服器原因,連接資料庫時有可能會失敗。為了避免這種情況,我們需要實現一種Flask鏈接資料庫失敗重試的方法。具體代碼如下:
import time
def get_db_retry(db_url, retry=3):
tried = 0
db = None
while tried < retry:
try:
db = SQLAlchemy()
db.init_app(app)
db.session.execute('SELECT 1')
break
except:
if not db:
print("DB not started yet.", tried)
time.sleep(1)
db = None
tried += 1
else:
db = None
tried += 1
return db
上述代碼中,我們定義了一個名為get_db_retry的函數,用於在Flask中重試連接資料庫。我們傳入一個db_url和重試次數retry,利用SQLAlchemy的init_app()方法初始化資料庫連接,然後使用execute()方法查詢。如果執行成功,則返回db對象;否則,重試retry次數。
四、Flask資料庫在哪
在Flask應用程序中,資料庫文件被存儲在應用程序配置的文件夾下。具體路徑可以使用Flask的config環境變數及當前工作目錄變數中的DATABASE_URI來指定。比如,我們可以在Flask應用程序中這樣配置:
from os import path
app.config['SQLALCHEMY_DATABASE_URI'] = ''sqlite:///' + path.join(basedir, 'data.sqlite')
在上述代碼中,我們將資料庫文件存放在當前文件夾中,並將其命名為data.sqlite。
五、Flask中資料庫插入數據
在Flask應用程序中,我們使用SQLAlchemy向資料庫插入數據時,具體操作如下:
db.session.add(user)
db.session.commit()
上述代碼中,我們將user對象注入到session中,並通過commit()方法將其添加到資料庫中。
結束語
本文主要從Flask連接資料庫並可視化、Flask資料庫遷移、Flask鏈接資料庫失敗重試、Flask資料庫在哪以及Flask中資料庫插入數據幾個方面,對Flask連接資料庫進行了詳細的闡述。希望本文的內容對讀者能夠有所幫助。
原創文章,作者:QDEP,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/137970.html