赞
踩
数据库的使用是任何程序开发不可缺少的一环,而在phython中,SQLAlchemy是最著名的ORM框架。在flask中,自然是flask-SQLAlchemy
以下介绍flask-SQLAlchemy配合sqlite数据库如何使用:
首先在py文件中定义
# 1. 实例化并注册
app.config['SQLALCHEMY_DATABASE_URI'] = \
'sqlite:///'+os.path.join(basedir,'data.sqlite')
app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = True
db = SQlAlchemy(app)
# 2. 建立实体类映射到数据库
class Role(db.Model):
__tablename__= 'roles'
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String,nullable=True)
# 设置关联其他表(User)
users = db.relationship('User',backref='role')
class User(db.Model):
__tablename = 'users'
id = db.Column(db.Integer,primary_key=True)
name = db.Column(db.String,nullable=True)
# 设置外键关联role
role_id = db.Column(db.Integer, db.ForeignKey('roles.id'))

而后创建数据库表
进入工程目录,在shell中:
#创建数据库
python manager.py shell
from app import db
from app import models
db.create_all()
from app.models import Role,User
#添加数据
admins = Role(name='adminiatrators')
mod = Role(name='moderator')
db.session.add_all([amins,mod])
db.session.commit()
#添加user关联role,这里的'role'是预先定义好的backref的值
jason = User(name='jason',role=admins)
db.session.add(jason)
db.session.commit()
#修改数据
jason.password = '123'
db.session.add(jason)
db.session.commit()
#删除数据
db.session.delete(jason)
db.commit()
#读取数据
User.query.all()
User.query.get(1)
#加条件查询
User.query.filter(id>0).all()
User.query.filter_by(name='jason').first()

如果你使用的ide是pycharm,直接使用集成的数据库管理工具就可以方便的查看数据库内容:
比如有如下需求:在用户表插入新用户时自动给role字段赋值Guest
1.在实体类中增加静态触发方法
@staticmethod
def on_created(target,value,initiator):
target.role = Role.query.filter_by(name='Guests').first()
2.添加监听器
db.event.listen(User.name,'append',User.on_created)
此处使用第三方库flask-migrate
迁移前的操作
from flask_migrate import Migrate,MigrateCommand
...
migrate = Migrate(app,db)
manager.add_command('db',MigrateCommand)
然后在命令行执行初始化操作
python manage.py db init
python manage.py db migrate -m 'Initial migration'
最后,将upgrade方法写入预设的deploy类,可以方便还原
@manage.command
def deploy():
upgrade()
#还可以执行一些初始化数据的脚本
...
需要迁移时,执行:
python manage.py deploy
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。