大家好,我是何三,80后老猿,独立开发者
你有没有经历过这样的场景?
深夜12点,办公室里只剩下你和电脑屏幕的微光。面前是一张密密麻麻的数据库表结构文档,右手边的咖啡已经凉透,左手还在机械地敲着class User(Base)
的SQLAlchemy模型定义。突然微信群弹出消息:“客户说登录接口的返回字段要加个用户等级,明天上线。”你看着刚写完的30个模型文件,后颈微微发凉...
三个月前我在Github挖到个宝贝。
当时正被一个老项目的数据库逆向工程折磨——500多张表要迁移到新系统,手写模型会死人的。直到遇见这个叫sqlacodegen的神器,它只用两行命令就把整个数据库的SQLAlchemy模型吐了出来,连relationship都自动关联好了。更绝的是,当我把它和FastAPI组合使用时,Swagger文档上的/api/v1/users接口居然自己长出来了。
# 运行命令时手都在抖
sqlacodegen postgresql://user:pass@localhost/dbname > models.py
# 生成的结果直接让同事以为我通宵加班了
class Order(Base):
__tablename__ = 'orders'
id = Column(Integer, primary_key=True)
user_id = Column(ForeignKey('users.id'))
product = Column(String(128))
user = relationship('User', back_populates='orders')
但这只是个开始。
当我们把生成的模型扔进FastAPI的路由工厂,魔法开始了。那些曾经需要写一整天的CRUD接口,现在就像按下复印机按钮一样自动生成。更妙的是,Swagger文档上的参数说明、响应示例居然都带着注释——原来工具会读取数据库字段的comment属性。
“你看这个创建用户的接口,”我指着自动生成的/docs页面,“连手机号格式校验都是现成的。上次前端小王说接口文档对不上,现在他们自己看这个比看我们写的Markdown还清楚。”
直到部署时遇到环境依赖的地狱。
Python版本冲突、系统库缺失、依赖包打架...这些本该在技术大会上吹牛的故事,在凌晨三点的服务器面前一点都不浪漫。直到我在项目里发现那个带着船长帽的Dockerfile——它把整个服务打包成集装箱,连nginx配置和HTTPS证书都准备好了。
# 第一次见到这么清爽的部署指南
docker-compose build
docker-compose up -d
现在当我再收到需求变更时,会先泡杯茶。
用逆向工具重新生成模型,让路由工厂刷新接口,在Docker镜像里打个新标签。那些曾经需要三天的工作,现在三杯茶的功夫就搞定了。上周实习生惊讶地问:“老师你怎么从来不加班?”我指了指屏幕上自动滚动的代码生成日志:“要让机器为你工作,而不是被机器工作。”