2011-12-07 39 views
7

tôi không phải bây giờ tại sao, nhưng từ một ngày khác y bắt đầu có vấn đề khi tôi đã cố gắng để chạy các bài kiểm tra. Tôi đang sử dụng django 1.1 (yêu cầu khách hàng) và khi tôi chạy thử nghiệm whith:django: sqlite3.OperationalError: không có bảng như vậy

python manage.py test --setting=settingsTest 

nó ném:

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 

nhưng tôi có trong settingsTest.py

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

    'site.programas_act', 
    ... 
) 

và trong /var/www/site/programas_act/models.py

class ActividadesPrograma(models.Model): 
    ... 

tôi loại bỏ các tập tin có tên trong settingsTest.DATABASE_NAME và chạy:

python manage.py syncdb --setting=settingsTest 

nhưng vẫn thất bại.

Nếu tôi chạy trong django shell_plus:

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

tôi có thể thấy ứng dụng, nhưng khi tôi chạy:

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 

tôi không thể phát hiện ra rằng tablename.

Bất cứ ai cũng có thể giúp tôi?

Cảm ơn

+0

Điều này cũng có thể xảy ra nếu một bảng trong mô hình của bạn không được tạo bởi di chuyển của bạn. Xem: http://stackoverflow.com/a/39246325/1551116 –

Trả lời

6

Tôi cũng gặp sự cố này. Hóa ra tôi phải thêm thuộc tính TEST_NAME vào tệp settings.py để xác định cơ sở dữ liệu thử nghiệm đúng cách. Nó giải quyết được vấn đề cho tôi:

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

Tôi gặp lỗi tương tự ngay cả sau khi sử dụng các cài đặt này cho 'NAME' và' TEST_NAME' – nnyby

+0

Tôi nhận được điều này với hai mục nhập trong settings.py DATABASES. Thêm 'TEST_NAME' đã sửa nó cho tôi. Người ta có thể là ': bộ nhớ:' nhưng không phải cả hai. Nỗ lực sử dụng ': memory:? Cache = shared' (trên mỗi tài liệu SQLite) không hoạt động. Python 2.7.8/Django 1.6. – JimB

+0

Không làm điều này! Chạy thử nghiệm từ một cơ sở dữ liệu không nhớ sẽ mất mãi mãi! – Cerin

0

Tôi nghĩ 'test manage.py' bắt đầu với cơ sở dữ liệu rỗng, vì vậy không có cách nào như thế nào 'syncdb' có thể giúp bạn.

Ngoài ra tôi không chắc chắn nếu nó typo chỉ trong câu hỏi của bạn, nhưng thông số thiết lập được gọi là

--settings 

và không:

--setting 

btw. nếu bạn đang nhập cài đặt trong mã, hãy sử dụng nhập theo cách này:

from django.conf import settings 
4

Có phải những thử nghiệm Selen này không? This page nói rằng bạn cần phải xác định một TEST_NAME cho cơ sở dữ liệu của bạn, bởi vì vì lý do nào đó cơ sở dữ liệu trong bộ nhớ bị hỏng.

Các vấn đề liên quan