您的位置:

使用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和安装的驱动程序,进行相应的配置即可。

使用Flask连接数据库

2023-05-10
详解Flask连接数据库

2023-05-17
连接mysql数据库笔记1(如何连接数据库mysql)

2022-11-10
python笔记第六天,python第六周笔记

2022-11-21
数据库的笔记mysql,数据库管理系统笔记

2022-11-24
Python的flask_mysqldb库:MySQL数据库

2023-05-13
jsp数据库笔记,jsp写入数据库

本文目录一览: 1、怎么用jsp连接mysql数据库 2、jsp中怎么使用数据库 3、JSP 从数据库中如何取得图片的路径? 怎么用jsp连接mysql数据库 一. 数据库的连接和操作笔记:1.初始化

2023-12-08
python学习笔记1基础篇(Python基础笔记)

2022-11-11
python数据库连接操作(Python连接数据库)

2022-11-10
关于python学习第四次笔记的信息

2022-11-08
jsp使用java连接数据库(jsp连接数据库的方法)

本文目录一览: 1、怎么使用JAVA连接数据库? 2、怎么用jsp连接mysql数据库 3、在JSP页面中实现连接数据库与在Java程序中实现连接数据库有什么区别? 4、java 中 怎样将JSP页面

2023-12-08
mysql数据库完整笔记(mysql数据库数据)

2022-11-13
python的用法笔记本(笔记本学python)

2022-11-16
Python实现访问数据库的API接口设计

2023-05-12
python学习笔记一之,python入门笔记

2022-11-21
mysqljdbc连接数据库步骤(如何使用jdbc连接数据库

2022-11-13
使用Python连接数据库

2023-05-10
使用Flask启动Python应用程序

2023-05-10
python学习系列day3(大学python笔记)

2022-11-15
最新python学习笔记3,python基础笔记

2022-11-17