Flask-SQlAIchemy管理数据库

本文介绍如何使用 Flask-SQLAlchemy 扩展管理 Flask 应用中的数据库,包括配置、模型定义、数据操作及查询等核心功能。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Flask-SQlAIchemy管理数据库

配置

class flask.ext.sqlalchemy.SQLAlchemy(app=None, use_native_unicode=True, session_options=None, metadata=None, query_class=<class 'flask_sqlalchemy.BaseQuery'>, model_class=<class 'flask_sqlalchemy.Model'>)

这个类用于控制对一个或多个flask应用程序的SQLAlchemy集成。根据您初始化对象的方式,它可以立即使用,也可以根据需要附加到一个烧瓶应用程序中。

有两种使用模式非常相似。一个是将实例绑定到一个特定的flask应用程序:

第一种:
app = Flask(__name__)
db = SQLAlchemy(app)

第二种:

db = SQLAlchemy()

def create_app():
    app = Flask(__name__)
    db.init_app(app)
    return app
两者的区别在于,在第一种情况下,createall()和dropall()方法都将一直工作,但在第二种情况下,flask.flask.app context()必须存在。
默认情况下,flask-sqlalchemy将应用一些特定于后台的设置来改善您的体验。在SQLAlchemy 0.6 SQLAlchemy中,将对库进行探测,以获得本地的unicode支持。如果它检测到unicode,它就会让库处理它,否则就会自行处理。有时,这种检测可能会失败,在这种情况下,您可能想要将使用nativeunicode(或sqlnatiynativeunicode配置密钥)设置为False。注意,配置键覆盖了传递给构造函数的值。

一旦创建,这个对象就包含 sqlalchemy 和 sqlalchemy.orm 中的所有函数和助手。此外它还提供一个名为 Model 的类,用于作为声明模型时的 delarative 基类:

from flask_sqlalchemy import SQLAlchemy
from flask import Flask

app=Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] ='mysql://root:xxx@localhost/flask'#配置数据库
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=True
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=True
db=SQLAlchemy(app)


class  User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(64), unique=True, index=True)
    country = db.Column(db.String(64), unique=True, index=True)
    def __init__(self,name):
        self.name=name

为了创建初始数据库,只需要从交互式 Python shell 中导入 db 对象并且调用 SQLAlchemy.create_all() 方法来创建表和数据库:

>>> from yourapplication import db
>>> db.create_all()
Boom, 您的数据库已经生成。现在来创建一些用户:
>>> from yourapplication import User
>>> admin = User('admin', 'admin@example.com')
>>> guest = User('guest', 'guest@example.com')
但是它们还没有真正地写入到数据库中,因此让我们来确保它们已经写入到数据库中:
>>> db.session.add(admin)
>>> db.session.add(guest)
>>> db.session.commit()
访问数据库中的数据也是十分简单的:
>>> users = User.query.all()
[<User u'admin'>, <User u'guest'>]
>>> admin = User.query.filter_by(username='admin').first()
<User u'admin'>
Flask-SQlAIchemy与普通的 SQLAlchemy 不同之处:
SQLAlchemy 允许您访问下面的东西:
sqlalchemy 和 sqlalchemy.orm 下所有的函数和类
一个叫做 session 的预配置范围的会话(session)
metadata 属性
engine 属性
SQLAlchemy.create_all() 和 SQLAlchemy.drop_all(),根据模型用来创建以及删除表格的方法
一个 Model 基类,即是一个已配置的声明(declarative)的基础(base)
Model 声明基类行为类似一个常规的 Python 类,不过有个 query 属性,可以用来查询模型 (Model 和 BaseQuery)
您必须提交会话,但是没有必要在每个请求后删除它(session),Flask-SQLAlchemy 会帮您完成删除操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值