首页 > 其他分享 >饮冰十年-人工智能-FastAPI-03- FastAPI之模型迁移(类似Django的migrante)

饮冰十年-人工智能-FastAPI-03- FastAPI之模型迁移(类似Django的migrante)

时间:2023-12-09 14:55:39浏览次数:34  
标签:03 FastAPI 数据库 Django Alembic 迁移 True alembic

         在开发 Web 应用程序时,通常会涉及到数据库模型的更改,例如添加新的表、字段或索引。为了使这些更改反映在数据库中,我们使用数据库迁移工具。FastAPI 本身并不包含数据库迁移(migration)的功能,但你可以使用第三方库来处理数据库迁移。其中,Alembic 是一个常用的数据库迁移工具,可以与 FastAPI 一起使用。本文我将向你介绍如何结合 FastAPI 和 Alembic 进行 SQLite 数据库迁移的步骤, 

一、安装 Alembic 和配置

步骤 1:安装 FastAPI 和 Alembic

pip install fastapi[all] alembic

 

这将安装 FastAPI 和 Alembic 及其相关依赖项。

pip install alembic

步骤 2:创建 FastAPI 项目

todo:参考上一篇博客

3、创建数据库模型

 

在 FastAPI 项目中,我们首先定义数据库模型。在 main.py 文件中创建一个简单的用户模型:

from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()

class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)
    username = Column(String, index=True)
    email = Column(String, unique=True, index=True)
模型

4:初始化 Alembic

运行以下命令初始化 Alembic 配置:

alembic init alembic

这将在项目中创建一个名为 alembic 的文件夹,并生成一些默认的配置文件。

步骤 5:配置 Alembic

打开 alembic.ini 文件,将数据库连接信息配置为你的实际数据库连接。找到以下部分:

# sqlalchemy.url = driver://user:pass@localhost/dbname
sqlalchemy.url = sqlite:///database.db
 

将其更新为你的数据库连接信息。

步骤 6:生成迁移脚本

运行以下命令,使用 Alembic 自动生成数据库迁移脚本:

alembic revision -m "first migrations"

Alembic 将分析你的 SQLAlchemy 模型,并生成一个包含必要指令的迁移脚本,以将数据库模式调整为与你的模型定义相对应的状态

步骤 7:执行数据库迁移

运行以下命令,将生成的迁移脚本应用到数据库:

alembic upgrade head

这将在数据库中创建相应的数据库。

二、进行模型创建与迁移

1:修改env.py文件

from main import User
target_metadata = User.metadata

这里暂时把model放置在了main.py,仅作为演示

2:生成迁移脚本

alembic revision --autogenerate -m "initial migrations"

 3:执行数据库迁移

alembic upgrade head

三、进行模型调整与创建

1:修改模型文件

在此基础上添加一个新模型,对旧模型添加一个字段,删除一个字段

# This is a sample Python script.

# Press Shift+F10 to execute it or replace it with your code.
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.


from sqlalchemy import Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base

Base = declarative_base()


class User(Base):
    __tablename__ = "users"

    id = Column(Integer, primary_key=True, index=True)
    username = Column(String, index=True)
    # email = Column(String, unique=True, index=True)
    age = Column(Integer, index=True)


class School(Base):
    __tablename__ = "school"
    name = Column(String, index=True)
修改模型

2:修改env.py文件

from main import User, School

target_metadata = School.metadata
target_metadata = User.metadata

3:生成迁移脚本

alembic revision --autogenerate -m "second migrations modify user,add school "

4:执行数据库迁移

alembic upgrade head

 

标签:03,FastAPI,数据库,Django,Alembic,迁移,True,alembic
From: https://www.cnblogs.com/YK2012/p/17890892.html

相关文章

  • FastAPI-请求参数与验证
    最近想搞一下接口,希望能简单上手,前后端分离,大致看了一遍SpringBoot,Gin,NodeJs,Flask,Django,FastAPI等,感觉还是用Python语言来写比较简单呀,关键点在于它语法清晰,能让我直接思考业务逻辑,而不是各种语法折腾.FASTAPI简介Documentation:https://fastap......
  • Django 含有外键模型新增数据以及序列化
    Django含有外键模型新增数据以及序列化Django原生实现外键classAppleModel(models.Model):id=models.AutoField(primary_key=True)app_name=models.CharField(max_length=50)classPickleModel(models.Model):pid=models.AutoField(primary_key=True)......
  • 『做题记录』[AGC032B] Balanced Neighbors
    [AGC032B]BalancedNeighborslink:https://atcoder.jp/contests/agc032/tasks/agc032_bDescription  给定整数\(N\),构造一个从\(1\)到\(N\)编号的\(N\)个节点的无向图,使得:该图不含有重边和自环,并且是连通的。每个节点的所有邻接节点的编号之和相同。  \(N\l......
  • django如何远程查询多对多字段?
    解决办法假设A表有一个多对多properties字段,通过A表远程查询properties的名称qs=A.objects.filter(properties__name=xxx)更复杂的:A表有一个外键字段version连接B表,B表有一个多对多字段properties,通过A表远程查询properties的名称qs=A.objects.filter(version__proper......
  • 使用django连接MySQL
    使用python311+pycharm社区版+MySQL80,使用django连接MySQL1.下载1.1.官网下载pythonhttps://www.python.org/downloads/如我的python3.11.4,可以进入如下的页面进行hash校验https://www.python.org/downloads/release/python-3114/1.2.官网下载pycharmhttps://www.......
  • 代码随想训练营第五十九天(Python)| 503.下一个更大元素II、42. 接雨水
    [503.下一个更大元素II]循环问题用2*n,i%n的方式n=len(nums)ans=[-1]*nstack=[]foriinrange(2*n):whilelen(stack)>0andnums[i%n]>nums[stack[-1]]:ans[stack[-1]]=nums[i%n......
  • Windows服务器,通过Nginx部署VUE+Django前后端分离项目
    目录基本说明安装Nginx部署VUE前端部署Django后端Djangoadmin静态文件(CSS,JS等)丢失的问题1.基本说明本文介绍了在windows服务器下,通过Nginx部署VUE+Django前后端分离项目。本项目前端运行在80端口,服务器端运行在8000端口。因此本项目使用Django的......
  • 【机器学习】Django,余弦距离之基于用户,评分物品的推荐
    表设计#用户表classUserInfo(models.Model):username=models.CharField(max_length=32,unique=True,verbose_name="用户名")password=models.CharField(max_length=64)#物品表classMovies(models.Model):name=models.CharField(max_length=255,v......
  • JavaWeb - Day03 - Ajax、前端工程化、Element
    01.Ajax-介绍Ajax概念:AsynchronousJavaScriptAndXML,异步的JavaScript和XML。作用:数据交换:通过Ajax可以给服务器发送请求,并获取服务器响应的数据。异步交互:可以在不重新加载整个页面的情况下,与服务器交换数据并更新部分网页的技术,如:搜索联想、用户名是否可用的校验等等......
  • 03_实验三_进程同步
    实验三进程同步实验目的使用EOS的信号量,编程解决生产者—消费者问题,理解进程同步的意义。调试跟踪EOS信号量的工作过程,理解进程同步的原理。修改EOS的信号量算法,使之支持等待超时唤醒功能(有限等待),加深理解进程同步的原理预备知识信号量机制问题:1.在双标志......