同步数据库

同步数据库

oauth/models.py 中没有指定数据库和表名,但是能直接连接数据库完成添加字段的操作,是因为 settings.py 中配置了数据库信息的原因吧?这里我有一个疑问,一个项目应该不会只用一张表,那么 settings.py 中的 DATABASES 字典中如果添加了多张表,在 migrate 的时候如何确定 models.py 是要同步哪一张表?还有,如果一个项目中有多个app,每个app中也可能都有 models.py ,在 migrate 的时候如何确定是同步哪个app下的 models.py 到哪一张表?

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
慕之熠_灿烈 2019-07-24 10:54:25

同学,您好。

Django中可以由模型类的定义直接生成对应的数据库表,原因是Django会根据settings中数据库的配置去自动创建表,底层也是调用SQL语句去执行的。但是在settings中配置的是数据库的名称,而非某一张表的名称,如下图:

http://img1.sycdn.imooc.com//climg/5d37c0050001329810550782.jpg

若项目中只配置一个数据库(如图所示),所有的model都会对应生成“app_模型类名称小写”这种形式的表,相互之间的名称都不相同,且都存储于上图中配置的数据库中。

那么当一个项目配置了多个数据库时,此时Django会依据自身的数据库路由机制生成对不同app下的模型类的表(该路由机制难以模拟,请暂时予以记忆性理解),

如果我的回答解决了您的疑惑,请采纳!祝学习愉快~~~

  • 提问者 洛维西 #1
    不好意思,我是想说库来着,说成了表。 那么假设现在 settings 只配置了一个库,项目中有若干个 app,都配置了 models,那么我在执行 python manage.py migrate 之后,所有 app 下的 models 都会新增表是么?我如果这次同步只想新增某个 app 下 models 的表是无法做到的是么? 假设现在 settings 配置了多个库,我计划 app1 在库1中新增一张表,app2 在库2中新增一张表,按照老师说的,Django会自动帮我匹配?不需要我告诉它 app1-->库1,app2-->库2 么?
    2019-07-24 16:35:16
  • 慕之熠_灿烈 回复 提问者 洛维西 #2
    settings 只配置了一个库,项目中有若干个 app,都配置了 models,那么我在执行 python manage.py migrate 之后,会创建所有model中模型类对应的表格(前提:app已激活(配置到settings)中)。 若要对单个app下的Model进行数据迁移,可借助“python manage.py makemigrations app_name”命令实现(具体使用请查阅资料进行)。 配置多个数据库时需要依据数据库配置中的键值进行路由设置,手动指定对应的数据库进行数据同步,自动匹配的前提是已经设置了数据库的路由选择。
    2019-07-24 19:45:27
  • 提问者 洛维西 回复 慕之熠_灿烈 #3
    1.“执行 python manage.py migrate 之后,会创建所有model中模型类对应的表格(前提:app已激活(配置到settings)中)”,如果先创建了 app1,并且之前已经执行过同步,那么在同步 app2 的时候,如果期间 app1 没有新增或修改过字段,那么同步时 app1 不受影响;如果期间 app1 有过新增/修改,那么同步 app2 的时候相当于对 app1 的增量数据进行了更新。我理解的对么? 2.“配置多个数据库时需要依据数据库配置中的键值进行路由设置,手动指定对应的数据库进行数据同步,自动匹配的前提是已经设置了数据库的路由选择。”这部分后面会讲么?
    2019-07-24 19:58:51
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
3.从网页搭建入门Python Web
  • 参与学习           人
  • 提交作业       218    份
  • 解答问题       3562    个

本阶段带你用Python开发一个网站,学习主流框架Django+Flask是Python Web开发的第一步,在基础知识上实现积分商城的项目开发,体验真实的项目开发流程,提高解决编程问题和效率的能力。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师