代码之家  ›  专栏  ›  技术社区  ›  Attila O.

如何*不*在syncdb上运行Django代码

  •  2
  • Attila O.  · 技术社区  · 14 年前

    “我有一些服务器启动代码”型号.py“我的Django应用之一。我需要在服务器启动时运行代码。

    syncdb 具有 psycopg2 (它会中断事务,并且不会创建表。)

    django.core.exceptions.MiddlewareNotUsed 这不是最优的,因为我也希望在Django shell中有这样的效果(而且将初始化代码放在中间件中听起来也不太合适),而且我需要等待第一个请求来完成。我想在服务器启动时运行代码,而不是当第一个客户来敲我的网站时。

    服务器启动信号仍然没有在Django中实现,所以这不是一个选项。

    因此,我想:

    • 检查Django是否运行syncdb,这样我就不做查询了,

    我在任何文档中都没有找到上述两个选项中的任何一个。我该怎么做?或者有没有更好的方法来做我想做的事情?

    4 回复  |  直到 14 年前
        1
  •  1
  •   Bernhard Vallant    14 年前

    Django也应该加载 urls.py 在启动时;我不能告诉您这是否适合您的代码,但如果您愿意,请尝试一下!

        2
  •  1
  •   Manoj Govindan    14 年前

    你有没有考虑过连接到 post_syncdb 信号?也许您可以在接收到这个信号时运行定制SQL。这可能会部分解决您的问题;您仍然需要弄清楚如何在服务器启动时运行SQL。

        3
  •  1
  •   Jordan Reiter    14 年前

    import sys
    ...
    IN_SYNCDB = ('syncdb' in sys.argv)
    

    那么

    if not settings.IN_SYNCDB:
        # run SQL code
    
        4
  •  0
  •   Xun Yang    13 年前

    Django.db.utils.DatabaseError 升起。尝试..除了我认为查询代码是满足第二个条件的方法。

    问题:

    class Foo(Model):
        #model definition here
    
    def fun():
        obj=Foo.objects.get(pk=1)
        #other logics here...
    
    fun() #This causes a DatabaseError
    

    型号.py

    class Foo(Model):
        #model definition here
    
    def fun():
        obj=Foo.objects.get(pk=1)
        #other logics here...
    
    try:
        fun() 
    except DatabaseError:
        pass