在 Flask 中連線 MySQL 資料庫

Salman Mehmood 2022年7月18日
在 Flask 中連線 MySQL 資料庫

通過這個解釋,我們將學習如何在 flask_mysqldb 的幫助下在 Flask 中連線 MySQL 資料庫。我們還將學習如何線上設定資料庫。

藉助 flask_mysqldb 在 Flask 中連線 MySQL 資料庫

有時使用者希望直接在 SQL 中編寫查詢,而不是使用諸如 sql-alchemy 之類的東西,因此無論出於何種原因,你都可以選擇編寫查詢 SQL。在 Flask 中,mysqldb 允許你這樣做。

現在我們將在名為 freemysqlhosting.net 的服務上建立一個免費的 MySQL 資料庫。你可以使用此連結訪問該網站。

建立帳戶後,你將看到如下所示的螢幕,當你建立資料庫時,你將在 15 分鐘內收到一封包含你的資料庫資訊的電子郵件。

免費的 MySQL 託管

現在我們將使用這個資料庫來獲取我們的 Flask 應用程式中的資訊。我們要做的第一件事是安裝一個名為 Flask-MySQLdb 的模組。

pip install Flask-MySQLdb

現在我們需要匯入所需的庫:

from flask import Flask
from flask_mysqldb import MySQL

現在我們將建立一個應用程式例項並使用 MySQL(app) 類例項化該應用程式。如果你正在使用多個 Flask 應用程式,你還可以使用以下程式碼來指定你的 Flask 應用程式:

mysql = MySQL()
mysql.init_app(app)

但是我們將所有內容都放在一個檔案中,因此我們不需要這樣做。由於我們正在使用資料庫,因此我們需要設定配置。

首先,我們需要定義 MYSQL_USER,然後我們需要 MYSQL_PASSWORD。我們還需要定義資料庫所在的 MYSQL_HOST;它可以在你的本地計算機上,也可以在我們已經設定的單獨服務上或其他任何地方。

我們也有資料庫本身,所以我們必須定義資料庫的名稱。我們會新增一些不必要的額外配置,這有助於獲取返回的資料。

它只需要元組,但在涉及資料庫時字典更容易使用,因為列可以是鍵,而這些鍵的值將是特定列中的值。如果我們不新增任何內容,則預設採用元組。

app.config['MYSQL_USER'] = 'user_name'
app.config['MYSQL_PASSWORD'] = 'user_password'
app.config['MYSQL_HOST'] = 'sql3.example.net'
app.config['MYSQL_DB'] = 'Database_name'
app.config['MYSQL_CURSORCLASS'] = 'DictCursor'

mysql = MySQL(app)

可以放埠,但是 MySQL 資料庫預設使用 3306,所以我們不需要更新任何東西。現在我們要與資料庫互動,因此我們將建立路由並建立一個名為 CONNECT_DB() 的函式,並且要與資料庫互動,我們需要使用遊標。

遊標將允許我們執行語句以獲取這些語句的結果。我們將建立一個名為 CS 的變數並使用 mysql.connection.cursor() 對其進行例項化,我們還將建立一個表並將其命名為 TABLE_NAME,我們將定義幾個列。

@app.route('/')
def CONNECT_DB():
    CS = mysql.connection.cursor()
    CS.execute('''CREATE TABLE TABLE_NAME (id INTEGER, name VARCHAR(20))''')

我們已經建立了表並將資料插入到表中。然後,我們需要在插入資料或更新或刪除後提交。

當資料插入資料庫時​​,我們還將返回一個字串。

CS.execute('''INSERT INTO TABLE_NAME VALUES (1, 'Harry')''')
CS.execute('''INSERT INTO TABLE_NAME VALUES (2, 'Arthor')''')
mysql.connection.commit()
return 'Executed successfully'

讓我們繼續執行伺服器,看看瀏覽器是否返回了字串。確保你的網際網路連線已連線。

Flask MySQL - 輸出 1

我們將需要驗證資料是否已插入資料庫。現在將進行查詢以選擇表。

由於我們將檢索多行,我們可以使用 fetchall()。我們將把所有資訊放入 Executed_DATA 變數中。

我們將其列印到控制檯並顯示返回值:

CS.execute('''SELECT * FROM TABLE_NAME''')
Executed_DATA = CS.fetchall()
print(Executed_DATA)
return str(Executed_DATA[1]['name'])

讓我們儲存並重新整理頁面。我們可以看到顯示的值,如果我們在控制檯中向下看,我們可以看到一個包含兩個專案的元組。

Flask MySQL - 輸出 2

完整的 Python 程式碼:

from flask import Flask
from flask_mysqldb import MySQL

app = Flask(__name__)

app.config['MYSQL_USER'] = 'user_name'
app.config['MYSQL_PASSWORD'] = 'user_password'
app.config['MYSQL_HOST'] = 'sql3.example.net'
app.config['MYSQL_DB'] = 'Database_name'
app.config['MYSQL_CURSORCLASS'] = 'DictCursor'

mysql = MySQL(app)

# mysql.init_app(app)

@app.route('/')
def CONNECT_DB():
    CS = mysql.connection.cursor()
    # CS.execute('''CREATE TABLE TABLE_NAME (id INTEGER, name VARCHAR(20))''')

    # CS.execute('''INSERT INTO TABLE_NAME VALUES (1, 'Harry')''')
    # CS.execute('''INSERT INTO TABLE_NAME VALUES (2, 'Arthor')''')
    # mysql.connection.commit()
    # return 'Executed successfully'

    CS.execute('''SELECT * FROM TABLE_NAME''')
    Executed_DATA = CS.fetchall()
    print(Executed_DATA)
    return str(Executed_DATA[1]['name'])

if __name__=='__main__':
    app.run(debug=True)
Salman Mehmood avatar Salman Mehmood avatar

Hello! I am Salman Bin Mehmood(Baum), a software developer and I help organizations, address complex problems. My expertise lies within back-end, data science and machine learning. I am a lifelong learner, currently working on metaverse, and enrolled in a course building an AI application with python. I love solving problems and developing bug-free software for people. I write content related to python and hot Technologies.

LinkedIn