短发控 2024-11-21 10:17 采纳率: 33.3%
浏览 20
已结题

python flask如何做数据库数据迁移

非专业人士,编程仅爱好

近期在学习做一个数据库可视化的项目,用flask和sqlite实现,开发的过程中产生一个问题,再初期数据库模型不成熟的情况下,需要更新模型且保留原已有的数据该如何做,我搜索了解到flask-migrate有类似的功能,但是实际上他只迁移模型(数据表及表头),而原表中的真正数据并不迁移,似乎作用与drop、create并无二至(在migrate生成版本文件中的upgrade方法中也确实是这样,只drop了原有数据表,这样原表数据会被清空)。

请指教。

  • 写回答

1条回答 默认 最新

  • JavaPub-rodert 领域专家: 后端开发技术领域 2024-11-23 17:01
    关注

    本答案参考多次询问 ChatGPT-3.5 后选择的最佳回答,若是满意,还请采纳,谢谢。

    在使用Flask和SQLite进行数据库开发时,如果需要更新数据库模型并保留原有数据,可以采取以下步骤:

    1. 修改模型:在Flask的模型文件中修改你的数据库模型,比如添加新的字段或者修改现有字段。

    2. 创建迁移脚本:使用Flask-Migrate创建一个新的迁移脚本。这可以通过运行以下命令完成:

      flask db migrate -m "Your migration message"
      
    3. 编辑迁移脚本:在生成的迁移脚本中,Flask-Migrate默认会生成dropcreate操作,这会导致数据丢失。你需要手动修改迁移脚本,以添加alter table操作来添加或修改字段,而不是删除并重新创建表。例如,如果你想添加一个新列,可以这样操作:

      from alembic import op
      import sqlalchemy as sa
      
      def upgrade():
          # ### commands auto generated by Alembic - please adjust! ###
          op.add_column('your_table_name', sa.Column('new_column_name', sa.String(length=120), nullable=True))
          # ### end Alembic commands ###
      
      def downgrade():
          # ### commands auto generated by Alembic - please adjust! ###
          op.drop_column('your_table_name', 'new_column_name')
          # ### end Alembic commands ###
      
    4. 应用迁移:修改完迁移脚本后,运行以下命令应用迁移:

      flask db upgrade
      
    5. 验证数据:迁移完成后,检查数据库确保数据未丢失,并且新的模型结构已经应用。

    请注意,直接编辑迁移脚本需要一定的SQL和数据库操作知识,以确保不会丢失数据。在进行任何数据库迁移之前,务必备份你的数据库,以防万一操作失误导致数据丢失。

    如果你不熟悉SQL或数据库迁移操作,可能需要进一步学习相关的知识,或者寻求专业人士的帮助。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

问题事件

  • 系统已结题 12月10日
  • 已采纳回答 12月2日
  • 创建了问题 11月21日