使用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/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

发表回复

登录后才能评论