2013-01-22 20 views
1

一旦在Django的应用程序的初始化,之前的PostgreSQL数据库已经建立,如果试图获取/所有/创建一个对象,他们通常会看到这样的错误:避免Django的DatabaseError关系“模式”并不存在

>>> Model.objects.all() 
{StackTrace} 
... 
DatabaseError: relation "model" does not exist 
... 

在我的应用我想能够测试模型是否存在,如果存在运行的代码,这可能使用Django?

伪代码:

if not (table_exists(model)) 
    return 
my_models = Model.objects.all() 
... 
+0

在什么情况下你会是在创建表之前运行的应用程序? –

+0

我想解决的问题实际上是因为我在'model/__ init__.py'中运行了一个需要模型的例程,创建了一个依赖循环。我没有意识到,Django运行'installed_apps'中列出的每个模型,该模型正在调用__init__.py代码。 –

回答

0

你能赶上在试图访问模型,真实抛出的异常:

from django.db import DatabaseError 

try: 
    Model.objects.exists() 
except DatabaseError: 
    print 'DB not yet initialized' 
else: 
    print 'DB table exists' 
0

我不知道你为什么会想这样做,但你可以只发出原始SQL,看看表中存在?

SELECT table_name FROM information_schema.tables WHERE table_schema = 'public';