将所有内容都放在 Django 模型中是否明智?

发布于 2024-09-15 13:49:48 字数 860 浏览 8 评论 0原文

我刚刚继承了一个 Django 项目用于维护和持续开发。虽然我是一个相当熟练的程序员(也是 Python),但我几乎没有使用 Django 的经验,因此我需要对我的想法进行一些理智检查;)

当前的问题是:该项目包含一个自定义安装.sh 文件,它执行三件事:

  1. 创建一些非模型数据库并通过 SQL 导入初始数据
  2. 使用 manage.py 导入固定装置
  3. 常用的 migrate.pysyncdbmigrate.py 迁移

install.sh 还包含一些实现半生不熟的 south 依赖管理的逻辑,我将其替换为 native one

我的想法如下:

  1. 为每个非模型数据库表生成模型(manage.pyspectdb for a开始,然后在应用程序中分开)。
  2. 将所有非 south 模型转换为 south
  3. 将初始 SQL 数据转换为 south 固定装置
  4. 将数据库备份例程转换为 manage.py dumpdata (并恢复到 manage.py loaddata 固定装置)。
  5. 永远不要再使用原始 SQL

现在简单的问题是:这个计划是否明智?有哪些替代方案?

I've just inherited a Django project for maintenance and continuous development. While I'm a fairly proficient programmer (also Python) I have next to no experience with Django, therefore I need a bit of saneness-checking for my ideas ;)

The current problem is this: the project contains a custom install.sh file, which does three things:

  1. Creating some non-model databases and importing initial data via SQL
  2. Importing fixtures using manage.py
  3. The usual migrate.py syncdb and migrate.py migrate.

(install.sh also contained some logic to implement half-baked south dependency management, which I replaced by a native one)

My idea was the following:

  1. Generate models for every non-model database table (manage.py inspectdb for a start, split up in apps afterwards).
  2. Convert all non-south models to south
  3. Convert initial SQL data to south fixtures
  4. Convert database backup routines to manage.py dumpdata (and restoring to manage.py loaddata fixtures).
  5. Never work with raw SQL again

Now the simple question is: is this plan sensible? What are the alternatives?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

溺深海 2024-09-22 13:49:49

如果您追求纯粹的非实际 SQL 路线,那么对我来说听起来很理智。

两个小点:

  • 3)中的装置实际上是 Django 装置,而不是 South 装置。
  • 使用 dumpdata 创建 JSON/XML Django 固定装置然后恢复它们并非没有风险。某些 django.contrib 应用程序(以及许多其他非 contrib 应用程序)可能会由于 FK 冲突等、循环依赖等而导致加载数据痛苦。因此,我建议转储到 SQL 以及固定装置。如果您的服务器在阳光下度假时发生爆炸等情况,原始 SQL 转储对于非 Djangonaut 来说恢复速度会更快

Sounds sane enough to me, if you're after a pure no-actual-SQL route.

Two small points:

  • the fixtures in 3) are actually Django fixtures, rather than South ones.
  • using dumpdata to create JSON/XML Django fixtures and then restoring them is not without risks. Certain django.contrib apps (and many other non-contrib ones) can cause loaddata pain due to FK clashes etc, due to round-robin dependencies, etc. So, I would recommend dumping to SQL as well as fixtures. A raw SQL dump will be faster for a non-Djangonaut to restore if your server explodes while you're holidaying in the sun, etc
会发光的星星闪亮亮i 2024-09-22 13:49:49

为每个非模型数据库表生成模型(开始时使用manage.py InspectionDB,然后在应用程序中拆分)。

听起来不错。不过,您可能希望在需要使用的基础上继续进行。从您立即需要的那些开始。

将所有非南方模型转换为南方

我不太明白非南方模型是什么。如果您的意思是为所有现有模型生成向南迁移(然后可能在迁移过程中伪造它们),那么是的,这是有道理的。

将初始 SQL 数据转换为南装置

再次,什么是 South 固定装置?

将数据库备份例程转换为 manage.py dumpdata(并恢复到 manage.py loaddata 固定装置)。

我对此不太确定。我发现数据库特定的备份和恢复解决方案比manage.py 使用得更频繁。特别是如果您有遗留触发器/存储过程等。

永远不要再使用原始 SQL

理论上很好。请记住,您有时必须挖掘 SQL。只要您不以此作为与 SQL 失去联系的理由,或者以此为借口不让自己的双手“脏”在 SQL 上,那么就可以继续。

Generate models for every non-model database table (manage.py inspectdb for a start, split up in apps afterwards).

Sounds good. You may want to proceed on a need-to-use basis on this though. Start with those you need immediately.

Convert all non-south models to south

I don't quite get what a non-south model is. If you mean generating south migrations for all existing models (and then probably --fake them during migration) then yes, this makes sense.

Convert initial SQL data to south fixtures

Again, what are South fixtures?

Convert database backup routines to manage.py dumpdata (and restoring to manage.py loaddata fixtures).

I am not so sure about this one. I have seen database specific backup and restore solutions used more frequently than manage.py. Especially if you have legacy triggers/stored procedures etc.

Never work with raw SQL again

Good in theory. Do keep in mind that you will at some point have to dig up SQL. As long as you don't use this as a reason to lose touch with SQL, or use it as an excuse not to get your hands "dirty" with SQL, then yes, go ahead.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文