随着数据爆炸式增长,对于数据的存储和处理需求愈发迫切。而数据库作为数据的重要存储方式,在现代应用中得到了广泛的应用。如何在Python应用中使用数据库,是Python开发者需要掌握的重要技能之一。本文主要介绍如何使用Flask框架连接数据库,并提供一个简单的示例。
一、Flask框架简介
Flask是一个基于Python的轻量级Web应用框架,它的设计目标是使得开发Web应用更加简单和快速。Flask不依赖于任何第三方库,但是它的扩展库十分丰富,可以满足各种需求。
二、数据库连接方式
Python中操作数据库的方式有很多,比如提供了原生的SQLite3模块,可以直接操作SQLite数据库;同时,Python也提供了ORM框架,例如SQLAlchemy,可以将Python对象映射到数据库表中。在使用Flask框架时,可以结合这些方式进行数据库连接。
1. 原生SQLite3模块的使用
在Python中使用SQLite3模块连接数据库非常简单,只需要调用sqlite3.connect()方法即可。示例代码如下:
```
import sqlite3
conn = sqlite3.connect('example.db')
c = conn.cursor()
# 创建表
c.execute('''CREATE TABLE users
(id INT PRIMARY KEY NOT NULL,
name TEXT NOT NULL,
age INT NOT NULL);''')
# 插入数据
c.execute("INSERT INTO users (id, name, age) VALUES (1, 'Tom', 18)")
# 查询数据
c.execute("SELECT * FROM users")
print(c.fetchall())
# 关闭连接
conn.close()
```
2. SQLAlchemy的使用
SQLAlchemy是Python中最流行的ORM框架之一,它可以将Python对象映射到数据库表中。使用SQLAlchemy时,我们需要先安装SQLAlchemy库,然后配置数据库连接信息。示例代码如下:
```
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
db = SQLAlchemy(app)
# 创建模型
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
age = db.Column(db.Integer, nullable=False)
def __repr__(self):
return '
# 创建表
db.create_all()
# 插入数据
user = User(id=1, name='Tom', age=18)
db.session.add(user)
db.session.commit()
# 查询数据
users = User.query.all()
print(users)
```
三、Flask连接数据库的配置
在使用Flask连接数据库之前,我们需要先配置数据库连接信息。Flask提供了一个配置对象app.config,可以通过app.config来配置数据库连接信息。示例代码如下:
```
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
db = SQLAlchemy(app)
```
这里我们指定了数据库的URI,Flask会自动根据URI来连接数据库。如果需要连接其他类型的数据库,只需要修改URI即可。
四、Flask连接多个数据库
在实际开发中,有时候需要连接多个数据库。Flask提供了一个多数据库连接机制,可以连接多个数据库。示例代码如下:
```
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_BINDS'] = {
'users': 'sqlite:///users.db',
'products': 'sqlite:///products.db'
}
db = SQLAlchemy(app)
# 使用users数据库
class User(db.Model):
__bind_key__ = 'users'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
age = db.Column(db.Integer, nullable=False)
def __repr__(self):
return '
# 使用products数据库
class Product(db.Model):
__bind_key__ = 'products'
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
price = db.Column(db.Float, nullable=False)
def __repr__(self):
return '
```
这里我们通过app.config['SQLALCHEMY_BINDS']来指定多个数据库的URI,然后在模型中通过__bind_key__来指定使用哪个数据库。
五、Flask连接数据库的包装
在使用Flask连接数据库时,我们可以使用一个包装类来简化操作。示例代码如下:
```
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///example.db'
db = SQLAlchemy(app)
class Database:
def __init__(self, app=None):
self.app = app
if app is not None:
self.init_app(app)
def init_app(self, app):
self.db = SQLAlchemy(app)
db = Database(app)
# 使用users数据库
class User(db.db.Model):
id = db.db.Column(db.db.Integer, primary_key=True)
name = db.db.Column(db.db.String(80), nullable=False)
age = db.db.Column(db.db.Integer, nullable=False)
def __repr__(self):
return '
# 使用products数据库
class Product(db.db.Model):
id = db.db.Column(db.db.Integer, primary_key=True)
name = db.db.Column(db.db.String(80), nullable=False)
price = db.db.Column(db.db.Float, nullable=False)
def __repr__(self):
return '
```
这里我们定义了一个Database类来包装SQLAlchemy,然后在模型中使用db.db来访问数据库。
六、总结
本文介绍了使用Flask连接数据库的几种方式,包括原生SQLite3模块和SQLAlchemy框架的使用方法,以及Flask连接多个数据库和使用包装类的方法。通过本文的学习,读者可以掌握Flask连接数据库的基本操作,为后续的开发工作打下基础。