Flask(Mysql)——ORM模型外键与表的关系及用flask_migrate迁移ORM模型

一、ORM模型外键与表的关系 

1、创建一个用户表,一个文章表,用户和文章是1对多的关系,通过用户查找他的文章

class User(db.Model):  #创建User表继承已经封装好的数据库模型
    __tablename__ = "user"    #表名
    #定义字段
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)   #autoincrement自动增长
    # varchar, null=0
    username = db.Column(db.String(100), nullable=False)
    password = db.Column(db.String(100), nullable=False)

class Article(db.Model):
    __tablename__ = "article"
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)
    title = db.Column(db.String(200), nullable=False)
    content = db.Column(db.Text, nullable=False)
    # 添加作者的外键即用户id
    author_id = db.Column(db.Integer, db.ForeignKey("user.id"))
    # backref:会自动的给User模型添加一个articles的属性,用来获取文章列表
    author = db.relationship("User", backref="articles")
    #author是一个关系属性,它表示与"User"模型的一对多关系

with app.app_context():  #上下文管理器来创建数据库表
    db.create_all()

 2、填充数据(创建一个用户,两篇文章)

@app.route("/user/add")
def add_user():
    # 1. 创建ORM对象
    user = User(username="小陈", password='1001')
    # 2. 将ORM对象添加到db.session中
    db.session.add(user)
    # 3. 将db.session中的改变同步到数据库中
    db.session.commit()
    return "用户创建成功!"
# http://127.0.0.1:5000/user/add
@app.route("/article/add")
def article_add():
    article1 = Article(title="Flask如何连接数据库", content="Flask_database")
    article1.author = User.query.get(1)

    article2 = Article(title="Django如何连接数据库", content="Django_database")
    article2.author = User.query.get(1)

    # 添加到session中
    db.session.add_all([article1, article2])
    # 同步session中的数据到数据库中
    db.session.commit()
    return "文章添加成功!"
# http://127.0.0.1:5000/article/add

3、查询用户文章

@app.route("/article/query")
def query_article():
    user = db.session.get(User, 1)
    for article in user.articles:
        print(article.title)
    return "文章查找成功!"
# http://127.0.0.1:5000/article/query

 二、flask_migrate迁移ORM模型

弃用这个映射方法

with app.app_context(): #上下文管理器来创建数据库表

        db.create_all()

 使用flask_migrate映射方法,先删除现有的表进行测试

在终端运行 pip install flask_migrate,导入这个包  

from flask_migrate import Migrate

#添加代码
db = SQLAlchemy(app)

 ORM模型映射成表-项目终端运行三步曲(类似Django)

1.、flask db init:这步只需要执行一次

flask db init这个命令用于初始化Flask应用的数据库迁移环境。它会在项目目录下创建一个名为migrations的文件夹,用于存放数据库迁移脚本。这些脚本可以帮助你管理数据库的结构变化,例如添加或删除表、修改表结构等。

2、flask db migrate:识别ORM模型的改变,生成迁移脚本

flask db migrate这个命令用于生成一个新的迁移脚本。当你对数据库模型进行了修改(例如添加了新的字段或表),你需要运行这个命令来创建一个新的迁移脚本,以便将这些更改应用到数据库中。生成的迁移脚本会记录下这次更改的内容。

3、flask db upgrade:运行迁移脚本,同步到数据库中

flask db upgrade这个命令用于将迁移脚本应用到数据库中,实际执行数据库结构的变更。当你运行flask db migrate生成了迁移脚本后,需要运行flask db upgrade来将这些更改应用到数据库,使数据库保持最新状态。


上一篇文章:Flask(MySQL)——ORM模型与表的映射及增删改查操作-CSDN博客

 

  • 6
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小陈从不熬夜

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值