Flask-SQLAlchemy库让flask更方便的使用SQLALchemy,是一个强大的关系形数据库框架,既可以使用orm方式操作数据库,也可以使用原始的SQL命令.
Flask-Migrate 是一个数据迁移框架,需要通过Flask-script库来操作.
程序使用的数据库地址需要配置在SQLALCHEMY_DATABASE_URI中,SQLALchemy支持多种数据库,配置格式如下:
Postgres:
postgresql://scott:tiger@localhost/mydatabase
MySQL:
mysql://scott:tiger@localhost/mydatabase
Oracle:
oracle://scott:tiger@127.0.0.1:1521/sidname
SQLite:
sqlite:////absolute/path/to/foo.db
db是SQLALchemy类的实例,表示程序使用的数据库,为用户提供Flask-SQLALchemy的所有功能
from flask import Flask from flask.ext.sqlalchemy import SQLAlchemy app = Flask(__name__) #配置数据库地址 app.config[‘SQLALCHEMY_DATABASE_URI‘] = ‘sqlite:////tmp/test.db‘ #该配置为True,则每次请求结束都会自动commit数据库的变动 app.config[‘SQLALCHEMY_COMMIT_ON_TEARDOWN‘] = True db = SQLAlchemy(app) #也可以db = SQLAlchemy() db.init_app(app)
Flask-SQLALchemy使用继承至db.Model的类来定义模型,如:
class User(db.Model, UserMixin):#UserMixin是Flask-Login库中所需要的 __tablename__ = ‘users‘ #每个属性定义一个字段 id = db.Column(db.Integer,primary_key=True) username = db.Column(db.String(64),unique=True)
password = db.Column(db.String(64))
def __repr__(self): return ‘<User %r>‘ % self.username
定义完需要在Python Shell中导入db,调用db.create_all()来创建数据库
(1)常用字段选项:
primary_key 设置主键
unique 是否唯一
index 是否创建索引
nullable 是否允许为空
default 设置默认值,可以传入函数的引用 如传入 datetime.datetime.utcnow 则每次创建时时间都是最新时间
(1) 插入数据:
from app.models import User from app import db #创建一个新用户 u = User() u.username = ‘abc‘ u.password = ‘abc‘
#将用户添加到数据库会话中 db.session.add(u)
#将数据库会话中的变动提交到数据库中,如果不Commit,数据库中是没有改动的 db.commit()
(2)查找数据:
#返回所有用户保存到list中 user_list = User.query.all() #查找username为abc的第一个用户,返回用户实例 u = User.query.filter_by(username=‘abc‘).first() #模糊查找用户名以c结尾的所有用户 user_list = User.query.filter(username.endswith(‘c‘)).all() #查找用户名不是abc的用户 u = User.query.filter(username != ‘abc‘).first()
(3)删除数据:
user = User.query.first()
db.session.delete(user)
db.session.commit()
(4)修改数据:
u = User.query.first() u.username = ‘sb‘ db.session.commit()
class Person(db.Model): id = db.Column(db.Integer, primary_key=True) name = db.Column(db.String(50)) #在多的一边使用relationship定义,backref将在Address表中创建个名为persons的Person引用,之后可以使用address.persons访问这个地址的所有人 addresses = db.relationship(‘Address‘, backref=‘persons‘, lazy=‘dynamic‘) class Address(db.Model): id = db.Column(db.Integer, primary_key=True) email = db.Column(db.String(50)) #在一的一边使用db.ForeignKey声明外键 person_id = db.Column(db.Integer, db.ForeignKey(‘person.id‘))
from flask.ext.migrate import Migrate, MigrateCommand migrate = Migrate(app,db) #第一个参数是Flask的实例,第二个参数是Sqlalchemy数据库实例 manager.add_command(‘db‘, MigrateCommand) #manaer 是Flask-Script的实例,这条语句在flask-script 中添加一个db命令
在命令提示行中
输入python manager.py db init 来创建迁移仓库,
输入python manager.py db migrate -m ‘initial migration‘来创建迁移脚本, 在数据库结构有变动后创建迁移脚本
输入python manager.py db upgrade 来更新数据库
Flask学习记录之Flask-SQLAlchemy,Flask-Migrate
原文:http://www.cnblogs.com/agmcs/p/4445583.html