flask-SQLAlchemy的使用(CRUD、触发器、迁移)
来源:互联网 发布:微创软件南京 编辑:程序博客网 时间:2024/05/21 14:06
数据库的使用是任何程序开发不可缺少的一环,而在phython中,SQLAlchemy是最著名的ORM框架。在flask中,自然是flask-SQLAlchemy
以下介绍flask-SQLAlchemy配合sqlite数据库如何使用:
1. 基本用法(创建、CRUD)
首先在py文件中定义
# 1. 实例化并注册app.config['SQLALCHEMY_DATABASE_URI'] = \ 'sqlite:///'+os.path.join(basedir,'data.sqlite')app.config['SQLALCHEMY_COMMIT_ON_TEARDOWN'] = Truedb = 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 shellfrom app import dbfrom app import modelsdb.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,直接使用集成的数据库管理工具就可以方便的查看数据库内容:
2. 数据库触发器
比如有如下需求:在用户表插入新用户时自动给role字段赋值Guest
1.在实体类中增加静态触发方法@staticmethoddef on_created(target,value,initiator): target.role = Role.query.filter_by(name='Guests').first()2.添加监听器db.event.listen(User.name,'append',User.on_created)
3. 数据库变更迁移
此处使用第三方库flask-migrate
迁移前的操作
from flask_migrate import Migrate,MigrateCommand...migrate = Migrate(app,db)manager.add_command('db',MigrateCommand)然后在命令行执行初始化操作python manage.py db initpython manage.py db migrate -m 'Initial migration'最后,将upgrade方法写入预设的deploy类,可以方便还原@manage.commanddef deploy(): upgrade() #还可以执行一些初始化数据的脚本 ...
需要迁移时,执行:
python manage.py deploy
阅读全文
1 0
- flask-SQLAlchemy的使用(CRUD、触发器、迁移)
- sqlalchemy触发器的使用-Event
- flask-SQLAlchemy一些使用技巧(关联关系的创建)
- Flask-SQLAlchemy使用方式
- Flask+SQLAlchemy入门使用
- Flask中使用Mysql的几点记录 / flask-sqlalchemy
- sqlalchemy的基础使用,sqlalchemy调用外部创建的触发器
- flask-sqlalchemy(1)
- flask sqlalchemy(二)
- flask sqlalchemy wtf 使用笔记
- Flask-SQLAlchemy使用问题记录
- 使用flask-sqlalchemy创建一对多的关系表
- Python程序和Flask框架中使用SQLAlchemy的教程
- Flask系列教程(二)--------------使用SQLAlchemy创建数据模型
- python flask SQLAlchemy 的用法
- Flask中使用SqlAlchemy的较好方法(根据数据库已有表,产生符合Flask-SqlAlchemy要求的models的定义)
- flask-SQLAlchemy错误(一)
- Flask使用SQLAlchemy时报字符集错误处理
- intellij idea 自定义注释模板
- http://www.cnblogs.com/kevingrace/p/5690241.html
- oracle如何去除字段的回车换行符
- SpringSecurity学习笔记(二)——访问数据库(二)
- hibernate中的批量查询(HQL查询&投影&Criteria&离线&sql)---【小白系列】0基础到熟练应用hibernate框架(十一)
- flask-SQLAlchemy的使用(CRUD、触发器、迁移)
- laravel框架-php artisan db:seed --class=RoleSeeder 报错 Class RoleSeeder does not exist
- 一张图看懂常用激活函数
- 关于request的乱码问题
- Rails中View开发规范
- [Java基础]java中函数参数传递
- Error:JDK1.8 Cannot change version of project facet Dynamic Web Module to 3.1.
- 剑指offer面试题14 调整数组顺序使奇数位于偶数前面
- 使用Loadrunner分别测量服务器响应时间及页面加载时间