组团学

数据库操作

阅读 (167556)

一、数据库迁移

1、安装

pip install flask-script

pip install flask-migrate

2、创建迁移对象

from flask_script import Manager from flask_migrate import Migrate, MigrateCommand migrate = Migrate(app, db) manager = Manager(app) manager.add_command("db", MigrateCommand) if __name__ == "__main__": manager.run()

3、创建迁移文件目录

python manage.py db init

结果:在工程目录下自动生成一个名为migrations的目录

4、生成迁移文件

python manage.py db migrate -m “说明信息,注意不能有中文”

python manage.py db migrate -m "first"

结果:在versions目录下生成迁移文件

5、执行迁移(更新数据库)

python manage.py db upgrade

6、查看迁移历史版本

python manage.py db history

二、普通方式数据增删改

注意

  • sqlalchemy默认是开启了事务处理

  • 每次操作完需要db.session.commit 或者 db.session.rollback()

1、添加数据

  • 添加一条数据

    @view.route('/insert/') def insert(): try: u = User(uusername='lucky', usex=True, uage=18, uinfo='lucky个人信息') db.session.add(u) db.session.commit() except: db.session.rollback() return '添加一条数据'
  • 添加多条数据

    @view.route('/insert_many/') def insert_many(): try: u1 = User(uusername='lucky', usex=True, uage=18, uinfo='lucky个人信息') u1 = User(uusername='迪丽热巴', usex=False, uage=28, uinfo='迪丽热巴个人信息') db.session.add_all([u1, u2]) db.session.commit() except: db.session.rollback() return '添加多条数据'

2、修改数据

@view.route('/update/') def update(): u = User.query.get(1) try: u.uusername = '杨幂' db.session.add(data) db.session.commit() except: db.session.rollback() return '修改'

3、删除数据

@view.route('/delete/') def delete(): try: data = User.query.get(1) db.session.delete(data) db.session.commit() except: db.session.rollback() return '删除数据'

三、定义增删改基础类与使用

1、定义类

db.py

class DBParent(): # 添加和修改的方法 def save(self): try: db.session.add(self) # 添加对象到数据库 self代表当前类的实例化的对象 db.session.commit() return True #成功 返回 True except: db.session.rollback() return False # 失败回滚返回False # 添加所有的方法 @staticmethod def saveAll(*args): try: db.session.add_all(*args) db.session.commit() return True except: db.session.rollback() return False # 删除的方法 def delete(self): try: db.session.delete(self) db.session.commit() return True except: db.session.rollback() return False db.DBParent = DBParent

模型继承DBParent

from exts import db # 继承db.DBParent,就拥有了自定义类的方法 class User(db.Model, db.DBParent): ...

2、使用

  • 添加数据

    添加一条数据

    @view.route('/insert/') def insert(): u = User(uusername='lucky', usex=True, uage=18, uinfo='lucky个人信息') u.save() return '添加一条数据'

    添加多条数据

    @view.route('/insert_many/') def insert_many(): u1 = User(uusername='lucky', usex=True, uage=18, uinfo='lucky个人信息') u1 = User(uusername='迪丽热巴', usex=False, uage=28, uinfo='迪丽热巴个人信息') User.saveAll(u1, u2) return '添加多条数据'
  • 修改数据

    @view.route('/update/') def update(): u = User.query.get(1) u.uusername = 'lucky' u.save() return '修改'
  • 删除数据

    @view.route('/delete/') def delete(): u = User.query.get(1) u.delete() return '删除'
需要 登录 才可以提问哦