Python 迁移和两个应用程序在不同的计算机上共享数据库的一部分

Python 迁移和两个应用程序在不同的计算机上共享数据库的一部分,python,django,django-models,Python,Django,Django Models,更好的描述-现在在新的部分重新表述问题 问题:如何在以下设置中在客户端上组织/manage migrate: 我必须在客户机上创建django网站,让本地用户登录并在本地做一些事情 还有一个服务器带有巨大的django应用程序,它的用户在服务器上做事情 客户机上还有一个“just python”应用程序,它从服务器传输数据,存储在本地,并使用直接SQL查询的本地副本(那里没有使用大量服务器表连接),只修改两个本地表,从服务器复制结构(而不是数据)以保持一致性 服务器django应用程序和客

更好的描述-现在在新的部分重新表述问题

问题:如何在以下设置中在客户端上组织
/manage migrate


  • 我必须在客户机上创建django网站,让本地用户登录并在本地做一些事情
  • 还有一个服务器带有巨大的django应用程序,它的用户在服务器上做事情
  • 客户机上还有一个“just python”应用程序,它从服务器传输数据,存储在本地,并使用直接SQL查询的本地副本(那里没有使用大量服务器表连接),只修改两个本地表,从服务器复制结构(而不是数据)以保持一致性
服务器django应用程序和客户机“justpython”应用程序已经建立了连接和传输数据的协议,完全是从服务器到客户机的。并非所有的表都被传输(因为并非所有的表都需要),有时在客户机上只强制执行表的结构,有时也强制执行数据

这些表就像“普通Mysql表”的内容一样通过一些XML/ssh/whatever进行传输,失去了django连接,主要是没有auth.*/admin.*/session.*/content.*表被传输(作为无关的),而许多django模型将“由用户修改”外键传输到(未传输的)用户表。这对客户来说并不重要


不,我必须在客户端上创建本地django web,使用

  • 它自己的用户集,一些配置文件(一个连接到本地用户的配置文件)
  • 它自己的本地表,为本地使用而读/写,但不会和服务器上的表冲突
  • 共享表(从服务器复制,在客户端上纯只读,有时被共享协议覆盖)

我从头开始编写客户端django部分,我可以访问服务器部分的源代码(例如,我可以复制models.py),但我需要添加

  • 本地身份验证
  • 管理“仅本地”表的内容
  • 可以通过迁移来扩展它们,但不要通过迁移现有的“从服务器复制的Mysql表”来进行更改
  • 对于仅从此类“服务器副本表”显示的数据,请使用一些数据(有些数据将通过外键从这些本地表链接)
很难保证,这些复制的表不会做任何不正常的事情(只会增加长度,现有记录最多会修改一些布尔列,可能以后会添加更多字段,但不会删除或更改任何字段(无论是按结构还是按含义))


问题是我应该如何构造我的“客户机django应用程序”,使其可维护、与表的服务器副本共存(并与之一起工作)

我可以通过声明一些模型来创建我的应用程序,迁移,复制“服务器模型”,使用
--fake
这一部分进行迁移,然后像往常一样继续,但它将安装在更多的客户端上,共享表的结构稍后可能会添加一些我需要阅读的内容-因此另一个
--fake
迁移

有没有办法在默认情况下进行一些“假”迁移,这样它就不会真正迁移,但不会以未填充的形式提供(如果那些模型会改变的话)?或者我只需将所有此类迁移命名为“0007\u PLEASE\u FAKE\u ME”,每次在每个客户机上手动完成?还是需要完全不同的访问权限

没有数据从客户端发送到服务器,服务器可以在任何时候发送它想要的任何数据/结构更改。无论如何,它都不会对我的应用程序造成问题,如果反映出一些结构更改,我会在之前收到警告,并且可以在传输真正发生后的几天/几周内完成

我甚至可以向“服务器”员工发送模型更改请求,将其合并到models.py中,并将其作为“仅结构更新”下推

我也可以将他们的models.py合并到我的models.py中,如果它发生变化的话

但我仍然不确定,我的OneTONE用户配置文件将如何在服务器上工作,那里有很多已经建立的用户,没有配置文件模型

Djago版本在服务器和客户端(1.10)上是相同的,所有表都是MyISAM


谢谢你的建议


编辑(针对@Thushar):

客户机通常365年7月24日运行,表按逻辑顺序由依赖项传输,首先是结束离开的表,然后是引用它们的表,最后是引用所有其他表的表-因此数据库模型每次都是一致的(只是在传输过程中可能不完整,所使用的任何表都有已传输的先决条件)

“Created_by”没有在客户端上使用(取消引用)。到目前为止,客户端只运行一些python代码,它使用了列a表的枚举子集。这种方法可以使用5年以上

  • 修改首先进入服务器(将值填充到表中),然后将表传输到客户机,然后客户机获得软件更新,软件更新使用了新功能(因此每次都以旧方式或新方式使用完整的新数据)服务器使用django,客户端使用纯SQL
    从active=1的主题中选择名称、文件名和卷

  • 数据库方案更改首先在服务器上完成,然后传输到客户机,然后更新客户机软件以使用新列(如SQL
    …和PLANGU allowed=1
    )。更改是向后兼容的,因此即使客户机有10个版本的过时软件,也可以完全使用实际数据,只是缺少一些新功能

  • 数据库传输的API非常稳定(即使有点慢),通过SSH传输某种形式的TXT/XML数据(很多时候客户端没有其他连接可用)——首先是表描述,然后是按顺序更改的每一行——并且传输的顺序是结构化的,因此可以在
    class CustomerTrend(models.Model):
        customer_id = models.ForeignKey(CustomerTable, related_name='purchased_by')
        item = models.CharField(max_length=50)
        price = models.PositiveIntegerField()