gpt4 book ai didi

python - 在独立脚本中使用 Django 模型 - 网站未更新

转载 作者:行者123 更新时间:2023-12-01 01:17:55 25 4
gpt4 key购买 nike

我正在尝试使用 Django ORMupdate() 更新我的 SQLite3 数据库中的记录功能。

我可以看到,在独立脚本中运行 update() 函数后,数据库实际上已更新,但更改不会反射(reflect)在我的网站上,直到我重新启动 Gunicorn 与:

sudo systemctl restart gunicorn

我怀疑这个问题与我将模型导入独立脚本的方式有关。

ROOT_DIR = /path/to/root/dir

sys.path.insert(0, ROOT_DIR)
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'AppName .settings')

import django
django.setup()

from main.models import Bet, Investment, Profile
from django.contrib.auth.models import User

Bet.objects.filter(id=4).update(revenue=10)

这段代码每天在我的服务器上运行一次。我希望看到更新反射(reflect)在我的网站上,而无需重新启动 Gunicorn。

更多上下文:我正在同一独立脚本中运行 create() 函数,该函数正在更新数据库并按预期反射(reflect)在我的网站上,而无需重新启动 gunicorn.

最佳答案

也许这不是您问题的直接答案,但对于 Django 中的独立脚本,我建议使用 custom management commands 。这样您就可以避免设置和环境变量。

例如,您可以编写一个脚本main/management/commands/my_script_1.py(阅读有关其原因的文档):

from django.contrib.auth.models import User
from django.core.management.base import BaseCommand
from main.models import Bet, Investment, Profile

class Command(BaseCommand):
def handle(self, *args, **options):
self.stdout.write('Before: {}'.format(
[(e.pk, e.revenue) for e in Bet.objects.filter(id=4)]))

# do the update of rows
Bet.objects.filter(id=4).update(revenue=10)

self.stdout.write('After: {}'.format(
[(e.pk, e.revenue) for e in Bet.objects.filter(id=4)]))

然后你可以像这样调用脚本(在Linux中):

$ ./manage.py my_script_1

或者,如果您的代码位于虚拟环境中,但想要从 cron 作业中调用脚本:

$ crontab -l
0 5 * * * cd /path/to/project && /path/to/project/.venv/bin/python /path/to/project/manage.py my_script_1 > /dev/null 2>&1

关于python - 在独立脚本中使用 Django 模型 - 网站未更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54158666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com