使用Flask連接資料庫

一、Flask對資料庫的支持

Flask是一個使用Python編寫的Web應用框架,它基於Werkzeug工具箱和Jinja2模板引擎。與Django不同的是,Flask並不內置ORM,但是可以通過擴展外部包實現數據過濾、查詢和邏輯操作。

Flask應用程序中,與資料庫相關的操作需要使用某種資料庫API,比如MySQLdb、psycopg2、SQLite等。這些API允許Flask與不同類型的資料庫通信。

Flask支持以下資料庫:

  • SQLite
  • PostgreSQL
  • MySQL
  • Oracle
  • Microsoft SQL Server

二、使用SQLite作為Flask應用程序的資料庫

SQLite是一種輕量級資料庫管理系統,適合於小型的應用程序和嵌入式設備。在Flask應用程序中使用SQLite非常簡單,只需安裝SQLite驅動程序即可。可以使用pip工具進行安裝,命令為:

pip install sqlite3

在Flask應用程序中,連接SQLite資料庫的代碼如下:

import sqlite3
from flask import Flask

app = Flask(__name__)
app.config['SECRET_KEY'] = 'your secret key'

def connect_db():
    """連接SQLite資料庫"""
    conn = sqlite3.connect('database.db')
    conn.row_factory = sqlite3.Row
    return conn

這裡使用了Flask提供的app.config字典屬性,定義了一個名為’SECRET_KEY’的全局變數。secret key在Flask應用程序中用於加密Session和CSRF數據。這個全局變數可以在應用程序任何地方獲取。

函數connect_db()用於連接SQLite資料庫。函數內部使用sqlite3模塊提供的connect()方法創建一個名為’database.db’的資料庫文件,並將文件對象存儲在變數conn中。row_factory屬性設置為sqlite3.Row,它將返回每一行作為一個可訪問屬性的對象。

在Flask應用程序中使用SQLite資料庫的一個簡單示例如下:

# -*- coding: utf-8 -*-
from flask import Flask, request, session, g, redirect, url_for, \
     abort, render_template, flash
from contextlib import closing
import sqlite3

# 配置資料庫連接
DATABASE = '/path/to/your/database.db'
DEBUG = True
SECRET_KEY = 'development key'
USERNAME = 'admin'
PASSWORD = 'default'

app = Flask(__name__)
app.config.from_object(__name__)

# 連接資料庫
def connect_db():
    """連接資料庫,返回SQLite資料庫連接對象"""
    return sqlite3.connect(app.config['DATABASE'])

# 初始化資料庫
@app.before_request
def before_request():
    """在請求之前建立資料庫連接"""
    g.db = connect_db()

# 關閉資料庫連接
@app.teardown_request
def teardown_request(exception):
    """隨請求結束時關閉資料庫連接"""
    db = getattr(g, 'db', None)
    if db is not None:
        db.close()

# 顯示所有條目
@app.route('/')
def show_entries():
    """顯示所有條目"""
    cur = g.db.execute('select title, text from entries order by id desc')
    entries = [dict(title=row[0], text=row[1]) for row in cur.fetchall()]
    return render_template('show_entries.html', entries=entries)

# 添加新條目
@app.route('/add', methods=['POST'])
def add_entry():
    """新增條目"""
    if not session.get('logged_in'):
        abort(401)
    g.db.execute('insert into entries (title, text) values (?, ?)',
                 [request.form['title'], request.form['text']])
    g.db.commit()
    flash('New entry was successfully posted')
    return redirect(url_for('show_entries'))

# 登錄頁面
@app.route('/login', methods=['GET', 'POST'])
def login():
    """用戶登錄"""
    error = None
    if request.method == 'POST':
        if request.form['username'] != app.config['USERNAME']:
            error = 'Invalid username'
        elif request.form['password'] != app.config['PASSWORD']:
            error = 'Invalid password'
        else:
            session['logged_in'] = True
            flash('You were logged in')
            return redirect(url_for('show_entries'))
    return render_template('login.html', error=error)

# 註銷
@app.route('/logout')
def logout():
    """註銷"""
    session.pop('logged_in', None)
    flash('You were logged out')
    return redirect(url_for('show_entries'))

# 啟動應用程序
if __name__ == '__main__':
    app.run()

這個示例應用程序包括一些基本的頁面,例如顯示所有條目、新增條目、用戶登錄、註銷等。在打開應用程序時,連接到SQLite資料庫,並使用在before_request中定義的connect_db()函數,隨後顯示所有的條目。在提交new entry請求時,將使用add_entry()函數將數據添加到資料庫中。

三、使用其他類型的資料庫

除了SQLite,Flask還支持其他類型的資料庫,例如PostgreSQL、MySQL、Oracle和Microsoft SQL Server。在使用這些資料庫之前,需要安裝相應的資料庫驅動程序。

以MySQL為例,要連接MySQL需要安裝mysql-connector-python模塊。可以使用pip工具進行安裝,命令為:

pip install mysql-connector-python

在Flask應用程序中連接MySQL的方法如下:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://username:password@hostname/database'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

db = SQLAlchemy(app)

這裡使用了Flask_SQLAlchemy擴展。後面的URI指定了MySQL伺服器的連接地址,其中包括用戶名、密碼和資料庫名稱。

連接其他類型的資料庫的方法也類似,只需根據資料庫API和安裝的驅動程序,進行相應的配置即可。

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/204338.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-07 12:16
下一篇 2024-12-07 12:17

相關推薦

  • 做Python的Flask開發,必須安裝PyCharm

    PyCharm是一款專業的Python集成開發環境(IDE),適用於Flask、Django等Web開發框架,提供了強大的代碼編輯、調試和版本控制等功能,大大提高了開發效率和代碼質…

    編程 2025-04-29
  • 使用Python Flask和Echarts展示疫情數據

    這篇文章將介紹如何使用Python Flask和Echarts製作一個能夠展示疫情統計數據的網頁。 一、安裝依賴庫 首先,需要安裝Python Flask和Echarts的依賴庫。…

    編程 2025-04-27
  • Flask APScheduler的全面介紹

    Flask APScheduler是一個輕量級的、最簡單的應用程序,可以提供定時任務的功能。它提供了靈活的調度程序、優秀的靈活性和可擴展性。本文將從多個方面對Flask APSch…

    編程 2025-04-25
  • Flask_script:讓Flask腳本管理更易於操作

    一、安裝和使用 Flask_script是Flask擴展庫的一部分,只需通過pip安裝即可。 pip install flask-script 安裝後,只需在Flask應用程序中導…

    編程 2025-04-23
  • 微信小程序連接資料庫詳解

    一、微信小程序連接資料庫詳細教程 要在微信小程序中連接資料庫,需要選擇合適的資料庫類型,比如MySQL、MongoDB或者雲資料庫。我們這裡以MySQL為例,教大家如何連接資料庫。…

    編程 2025-04-12
  • Flask開源項目的全面解析

    Flask是Python Web開發領域中一個簡單、易上手的Web框架,其源代碼開放且易於擴展,適用於中小型Web應用的開發。Flask基於Werkzeug、Jinja 2 模板引…

    編程 2025-02-25
  • 使用Flask Admin實現管理後台

    一、Flask Admin是什麼 Flask Admin是一個基於Flask框架的管理後台框架,它提供了一個易於使用和自定義的後台管理界面。 Flask Admin的好處是可以快速…

    編程 2025-02-05
  • 深入了解Flask Swagger

    一、什麼是Flask Swagger? Flask Swagger是Flask框架中的一個擴展,它提供了一種簡單的方法來構建和維護RESTful API文檔。它基於現有的swagg…

    編程 2025-02-01
  • Flask文件上傳指南

    一、Flask文件上傳運行 Flask是一個基於Python的Web應用程序開發框架,其中包括文件上傳功能。在使用Flask進行文件上傳之前,需要安裝Flask並創建Flask應用…

    編程 2025-01-24
  • Flask Web開發實戰

    Flask是一個用Python編寫的web應用框架, 位元組跳動的大佬David Beasley宣稱:Python web開發,只需Flask。 一、簡介 Flask是一個輕量級的W…

    編程 2025-01-20

發表回復

登錄後才能評論