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'>