共计 2407 个字符,预计需要花费 7 分钟才能阅读完成。
一、数据库迁移
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 '删除'
正文完
星哥玩云-微信公众号