本文共 2355 字,大约阅读时间需要 7 分钟。
Flask-SQlAIchemy管理数据库
配置
这个类用于控制对一个或多个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 SQLAlchemyfrom flask import Flaskapp=Flask(__name__)app.config['SQLALCHEMY_DATABASE_URI'] ='mysql://root:xxx@localhost/flask'#配置数据库app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=Trueapp.config['SQLALCHEMY_COMMIT_ON_TEARDOWN']=Truedb=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()[ , ]>>> admin = User.query.filter_by(username='admin').first()
Flask-SQlAIchemy与普通的 SQLAlchemy 不同之处:
SQLAlchemy 允许您访问下面的东西:
sqlalchemy 和 sqlalchemy.orm 下所有的函数和类
一个叫做 session 的预配置范围的会话(session)
engine 属性
SQLAlchemy.create_all() 和 SQLAlchemy.drop_all(),根据模型用来创建以及删除表格的方法
一个 Model 基类,即是一个已配置的声明(declarative)的基础(base)
Model 声明基类行为类似一个常规的 Python 类,不过有个 query 属性,可以用来查询模型 (Model 和 BaseQuery)
您必须提交会话,但是没有必要在每个请求后删除它(session),Flask-SQLAlchemy 会帮您完成删除操作。
转载地址:http://qtcqb.baihongyu.com/