V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
bigpigB
V2EX  ›  Python

Django 线上项目 项目启动时使用了大量外键,一对一,一对多,多对多的关联, 现在需要去除外键依赖,该怎么去除?

  •  
  •   bigpigB · 2022-03-02 17:28:49 +08:00 · 2637 次点击
    这是一个创建于 1031 天前的主题,其中的信息可能已经有所发展或是发生改变。
    也是接手的 Django 线上项目 ,外键确实限制后续太多的发展,如何慢慢摘掉外键的依赖?
    5 条回复    2022-03-03 16:09:30 +08:00
    cominghome
        1
    cominghome  
       2022-03-02 17:35:32 +08:00
    如果你说的是 db_constraint=False 这样的改动,一个个 model 改就完事了,如果是想从设计上杜绝外键,我劝你三思。。。
    IurNusRay
        2
    IurNusRay  
       2022-03-02 17:36:41 +08:00
    在模型字段中设置属性 db_constraint=False,然后迁移?
    youngce
        3
    youngce  
       2022-03-02 17:45:53 +08:00
    @IurNusRay #2
    @cominghome #1

    借问一句 sqlalchemy 有没有 db_constraint=False 这种设置,接了个 flask 的项目。。。
    allisone
        4
    allisone  
       2022-03-03 10:16:44 +08:00
    如果能在程序端做好数据约束,可以设置 db_constraint=False
    akaHenry
        5
    akaHenry  
       2022-03-03 16:09:30 +08:00
    > 正经解决:

    1. 接手项目, 老代码不要改设计. 可以重构, 但没必要. 先做隔离.
    2. 新增代码, 拆分微服务. 跟老代码切分开. 新 /旧服务通信走 HTTP rest API or gRPC. 不要产生内部模块代码依赖.
    3. db 新表设计, 禁止使用物理外键. Django 这种东西. 不适合做伤筋动骨的改造. 徒劳.
    4. 关于性能上, Python+Django+Celery+RabbitMQ+Gunicorn 全套打完, 如果还不行. 就老老实实切 Go. 哈哈.

    > 不正经解决:

    换 Go 吧. 2333
    老代码不动, 新业务用 Go 写, 再 HTTP / gRPC / WS 对接.
    Python + Django 就不适合做大型业务. 只适合 CMS 这种快 /糙 /猛的东西.
    如果弃用自带 ORM 的便利性(比如外键), 还用 Django 做啥. 哈哈.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2997 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 00:11 · PVG 08:11 · LAX 16:11 · JFK 19:11
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.