能否使用Django ORM操作未通过Django框架搭建的现有数据库?
Django ORM操作自建数据库问题解答
能不能用Django ORM操作现有数据库?
完全可以。Django ORM对数据库的操作只依赖你定义的Model和实际数据库表结构的匹配度,没有要求数据库必须由Django自带的migrations工具生成,不管你是用raw SQL还是alembic搭建的数据库,只要结构对应正确,ORM的增删改查、聚合、事务等所有功能都能正常使用。
是不是必须手动写所有Model?
不需要全手动写,Django提供了内置的inspectdb工具可以反向生成Model代码,操作步骤如下:
- 先把你的数据库连接信息配置到Django项目
settings.py的DATABASES配置项中 - 执行命令
python manage.py inspectdb,工具会自动扫描整个数据库的表、字段、约束,直接输出对应Model的代码 - 把生成的代码复制到对应Django应用的
models.py文件中即可
使用注意事项
- 自动生成的Model默认会添加
managed = False属性,这个属性会告诉Django不要通过migrations去修改、创建、删除对应表,非常适合你当前用alembic做数据库版本管理的场景,不要随意删除该配置,避免两边版本管理冲突 inspectdb的自动识别不是100%完美的,如果你用了自定义字段、枚举、特殊约束,生成的Model可能会有字段类型匹配偏差,你可以根据实际业务需要手动微调字段定义- 表之间的外键、多对多关联大部分场景下可以自动识别,但如果你手动创建的关联表没有遵循Django默认命名规则,需要你手动补充关联关系的配置
- 后续如果通过alembic修改了表结构,你可以重新执行
inspectdb生成新的代码对比调整,也可以直接手动修改Model定义,只要保证和实际数据库结构一致,ORM就能正常运行
内容的提问来源于stack exchange,提问作者JJT
相关产品推荐
相关产品推荐

