1

1.4 からバックポートされたバージョンのライブ サーバーを使用している Django(1.3.x) テストを実行しているときに、テーブルが見つからない場合がありました。通常のテストは正常に実行されますが、ライブ サーバー テストが適切なデータベースに接続していないようです。テスト データベースは次のように定義されます。

DATABASES['default']['ENGINE'] = 'django.db.backends.sqlite3'
DATABASES['default']['NAME'] = ':memory:'
DATABASES['default']['OPTIONS'] = {}
DATABASES['default']['TEST_NAME'] = ':memory:'

私は aa print ステートメントを入れましたdjango.db.backends.creation.create_test_db

    # We need to then do a flush to ensure that any data installed by
    # custom SQL has been removed. The only test data should come from
    # test fixtures, or autogenerated from post_syncdb triggers.
    # This has the side effect of loading initial data (which was
    # intentionally skipped in the syncdb).
    call_command('flush',
        verbosity=max(verbosity - 1, 0),
        interactive=False,
        database=self.connection.alias)

    print 'django_site' in self.connection.introspection.table_names()

どちらが出力されますか:

True

これで、データベースが正しくセットアップされたことがわかります。ただし、最初のリクエストでは、context_processor が Site モデルへのアクセスを試みます。

from django.contrib.sites.models import Site
Site.objects.get(pk=1)
DatabaseError: Database...o_site',)

すべてのテーブルを一覧表示すると、空のリストが返されます。

from django.db import connection
print connection.introspection.table_names()

[]

この接続は、セットアップ中と同じ接続に接続されていないかのようですが、

connection.settings_dict
{'ENGINE': 'django.db.backends.sqlite3', 'TEST_MIRROR': None, 'NAME': ':memory:',
'TEST_CHARSET': None, 'TIME_ZONE': 'UTC', 'TEST_COLLATION': None, 'PORT': '',
'HOST': '', 'USER': '', 'TEST_NAME': ':memory:', 'PASSWORD': '', 'OPTIONS': {}}

右に見えますか?

4

0 に答える 0