鱼C论坛

 找回密码
 立即注册
查看: 28|回复: 2

请问flask里 ORM模型迁移问题?

[复制链接]
发表于 昨天 19:38 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
你好请问ORM模型迁移可以迁移二次吗?,我第二次迁移也成功了,但是SQL数据里没有添加进表。
还有PyCharm里自己写的模型导入的时候导不进来,就是会报错: from  models import EmailCaptchaModel
ImportError: cannot import name 'EmailCaptchaModel' from 'models' (D:\Python\Project Development\demo09\models.py)
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 昨天 19:39 | 显示全部楼层
关于Flask的ORM迁移和导入问题,以下是解答:

问题1:ORM模型迁移可以多次执行吗?为什么第二次迁移后数据库没新表?

可以多次迁移,每次修改模型后都需要重新生成迁移脚本并应用\

常见原因及解决:
  • 未执行upgrade命令:执行完
    1. flask db migrate
    复制代码
    后,必须再执行
    1. flask db upgrade
    复制代码
    才能生效
  • 模型未注册:确保在
    1. models.py
    复制代码
    中正确定义了新模型,并在执行迁移前导入到应用实例中(在创建
    1. Migrate
    复制代码
    对象前导入)
  • 迁移脚本冲突:检查
    1. migrations/versions
    复制代码
    下的脚本,确认新生成的脚本包含创建表的操作(用文本编辑器打开查看)


问题2:导入模型报错 ImportError

检查文件结构:确认项目目录结构如下(
  1. models.py
复制代码
与主程序同级):

  1. project_folder/
  2. ├── app.py          # 主程序
  3. ├── models.py       # 模型定义文件
  4. └── migrations/     # 迁移文件夹(自动生成)
复制代码

验证类名拼写:在
  1. models.py
复制代码
中检查是否正确定义了类:

  1. class EmailCaptchaModel(db.Model):  # 确保类名完全一致
  2.     __tablename__ = "email_captcha"
  3.     id = db.Column(db.Integer, primary_key=True)
  4.     ...  # 其他字段
复制代码

  • 解决导入循环:避免在
    1. models.py
    复制代码
    中导入主程序的
    1. app
    复制代码
    对象,改用:

    1. # 在models.py中只定义模型,不初始化db
    2. db = SQLAlchemy()  # 单独创建db对象

    3. # 在app.py中关联
    4. from models import db, EmailCaptchaModel
    5. db.init_app(app)
    复制代码

    PyCharm标记源码根目录

    • 右键点击项目文件夹 → [Mark Directory as] → [Sources Root]
    • 确保
      1. models.py
      复制代码
      在蓝色标记的目录内


    迁移标准流程:

    1. # 1. 修改models.py后生成迁移脚本
    2. flask db migrate -m "add_email_captcha_table"

    3. # 2. 应用变更到数据库(关键步骤!)
    4. flask db upgrade

    5. # 3. 验证:进入数据库命令行
    6. SELECT * FROM email_captcha;  # 确认表存在
    复制代码


    注意: 若使用SQLite数据库,请检查是否使用了正确的数据库文件路径(通常为项目根目录下的 app.db)。

    以上回复来自 FishC AI 小助理,如未能正确解答您的问题,请继续追问。
  • 小甲鱼最新课程 -> https://ilovefishc.com
    回复 支持 反对

    使用道具 举报

     楼主| 发表于 1 分钟前 | 显示全部楼层
    你好,导入模块已经解决。
    按你的操作ORM迁移后,数据库并没有email_captcha表。执行SELECT * FROM email_captcha命令PyCharm报错
    + SELECT * FROM email_captcha
    + ~~~~~~~~~~~~~~~~~~~~~~~~~~~
        + CategoryInfo          : InvalidArgument: (:) [Select-Object],ParameterBindingException
        + FullyQualifiedErrorId : PositionalParameterNotFound,Microsoft.PowerShell.Commands.SelectObjectCommand
    小甲鱼最新课程 -> https://ilovefishc.com
    回复 支持 反对

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

    GMT+8, 2025-6-19 20:20

    Powered by Discuz! X3.4

    © 2001-2023 Discuz! Team.

    快速回复 返回顶部 返回列表