2011-12-07 6 views
7

私は今、なぜ、しかし1日から別のYに私がテストを実行しようとしたときに問題を持って始めません。 私は、Djangoの1.1(顧客の要求)を使用していると私はテストwhithを実行している場合:ジャンゴ:sqlite3.OperationalError:いいえ、そのようなテーブル

python manage.py test --setting=settingsTest 

それは投げる:

Traceback (most recent call last): 
    File "manage.py", line 11, in <module> 
    execute_manager(settings) 
    File "/usr/lib/pymodules/python2.6/django/core/management/__init__.py", line 362, in execute_manager 
    ... 
    File "/usr/lib/pymodules/python2.6/django/db/backends/sqlite3/base.py", line 193, in execute 
    return Database.Cursor.execute(self, query, params) 
sqlite3.OperationalError: no such table: programas_act_actividadesprograma 

しかし、私はsettingsTest.py

INSTALLED_APPS = (
    'django.contrib.auth', 
    ... 

    'site.programas_act', 
    ... 
) 

であり、 /var/www/site/programas_act/models.py

class ActividadesPrograma(models.Model): 
    ... 
で0

私はsettingsTest.DATABASE_NAMEで指定されたファイルを削除して実行します。

python manage.py syncdb --setting=settingsTest 

をまだ失敗。

私はDjangoのshell_plusで実行する場合:

import settings 
print settings.INSTALLED_APPS 
for app in settings.INSTALLED_APPS: 
    print app 

私はアプリを見ることができますが、私は実行すると:

from django.db import connection 
cursor = connection.cursor() 
qry="""SELECT name FROM sqlite_master 
WHERE type IN ('table','view') AND name NOT LIKE 'sqlite_%%' 
UNION ALL 
SELECT name FROM sqlite_temp_master 
WHERE type IN ('table','view') 
ORDER BY 1""" 
cursor.execute(qry) 
results = cursor.fetchall() 
for tablename in results: 
    print tablename 

私はそのテーブル名を見つけたことができません。

誰でも手伝ってもらえますか?

おかげ

+0

これは、モデル内のテーブルが移行によって作成されなかった場合にも発生する可能性があります。参照:http://stackoverflow.com/a/39246325/1551116 –

答えて

6

この問題もありました。テストデータベースを適切に識別するために、settings.pyファイルにTEST_NAMEプロパティを追加する必要があることが判明しました。

if 'test' in sys.argv: 
    DATABASES = { 
     'default': { 
      'ENGINE': 'django.db.backends.sqlite3', 
      'NAME': os.path.join(os.path.dirname(__file__), 'test.db'), 
      'TEST_NAME': os.path.join(os.path.dirname(__file__), 'test.db'), 
     } 
    } 
+2

私はsettings.pyのデータベース内の2つのエントリでこれを取得しても 'NAME'と' TEST_NAME' – nnyby

+0

のこれらの設定を使用した後、同じエラーを取得します。 「TEST_NAME」を追加するとそれが修正されました。 1つは ':memory:'でもかまいませんが、両方ではありません。 ':memory:?cache = shared'(SQLiteドキュメントごと)を使用しようとする試みが機能しませんでした。 Python 2.7.8/Django 1.6。 – JimB

+0

しないでください!非メモリデータベースからのテストの実行は永遠に続くでしょう! – Cerin

0

は、私が「manage.pyテストは」空のデータベースで始まると思いますので、「syncdbの実行」はあなたを助けることができるどのように方法はありません。

また、私はそれがあなたの質問にだけ誤植だかどうかわからないんだけど、設定パラメータが

--settings 

と呼ばれていない:

ところで
--setting 

。インポート設定をコードで使用する場合は、次のようにインポートを使用します。

4

これらのセレンテストは、万能ですか? This pageは、何らかの理由でメモリ内のデータベースがかなり壊れているため、データベースにTEST_NAMEを定義する必要があると言います。

関連する問題