2011-01-10 9 views
1

Immer wenn ich eine einfache Abfrage mit dem Django ORM auf einer Tabelle in der Remote-Oracle-Datenbank ausführen, erhalte ich diesen Fehler:Ich benutze Django mit einer Remote-Oracle-Datenbank, und bekomme eine "Tabelle existiert nicht" Fehler

>>> from apps.dl.models import Article 
>>> Article.objects.using('dl').all() 
Traceback (most recent call last): 
    File "<console>", line 1, in <module> 
    File "/var/www/acm.local/server-env/lib/python2.6/site-packages/django/db/models/query.py", line 68, in __repr__ 
    data = list(self[:REPR_OUTPUT_SIZE + 1]) 
    File "/var/www/acm.local/server-env/lib/python2.6/site-packages/django/db/models/query.py", line 83, in __len__ 
    self._result_cache.extend(list(self._iter)) 
    File "/var/www/acm.local/server-env/lib/python2.6/site-packages/django/db/models/query.py", line 269, in iterator 
    for row in compiler.results_iter(): 
    File "/var/www/acm.local/server-env/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 672, in results_iter 
    for rows in self.execute_sql(MULTI): 
    File "/var/www/acm.local/server-env/lib/python2.6/site-packages/django/db/models/sql/compiler.py", line 727, in execute_sql 
    cursor.execute(sql, params) 
    File "/var/www/acm.local/server-env/lib/python2.6/site-packages/django/db/backends/util.py", line 15, in execute 
    return self.cursor.execute(sql, params) 
    File "/var/www/acm.local/server-env/lib/python2.6/site-packages/django/db/backends/oracle/base.py", line 507, in execute 
    return self.cursor.execute(query, self._param_generator(params)) 
DatabaseError: ORA-00942: table or view does not exist 

Hier ist das Modell ich verwende:

class Article(models.Model): 
    id = models.CharField(primary_key=True, max_length=12, db_column="ID") 
    publication_id = models.CharField(blank=True, null=True, max_length=12, db_column="PUBLICATION_ID") 
    issue_id = models.CharField(blank=True, null=True, max_length=12, db_column="ISSUE_ID") 
    section_id = models.IntegerField(blank=True, null=True, max_length=12, db_column="SECTION_ID") 
    title = models.CharField(blank=True, null=True, max_length=512, db_column="TITLE") 
    subtitle = models.CharField(blank=True, null=True, max_length=512, db_column="SUBTITLE") 
    page_range = models.CharField(blank=True, null=True, max_length=32, db_column="PAGE_RANGE") 
    start_page = models.CharField(blank=True, null=True, max_length=12, db_column="START_PAGE") 
    end_page = models.CharField(blank=True, null=True, max_length=12, db_column="END_PAGE") 
    article_no = models.CharField(blank=True, null=True, max_length=12, db_column="ARTICLE_NO") 
    doi = models.CharField(blank=True, null=True, max_length=128, db_column="DOI") 
    publication_date = models.DateTimeField(null=True, max_length=7, db_column="PUBLICATION_DATE") 
    author_names = models.CharField(blank=True, null=True, max_length=4000, db_column="AUTHOR_NAMES") 
    sort_key = models.IntegerField(null=True, db_column="SORT_KEY") 
    abstract = models.TextField(blank=True, null=True, db_column="ABSTRACT") 
    citation_url = models.CharField(blank=True, null=True, max_length=128, db_column="CITATION_URL") 
    notes = models.CharField(blank=True, null=True, max_length=512, db_column="NOTES") 
    downloads6 = models.IntegerField(null=True, db_column="DOWNLOADS6") 
    downloads12 = models.IntegerField(null=True, db_column="DOWNLOADS12") 
    citings = models.IntegerField(null=True, db_column="CITINGS") 
    created_date = models.DateTimeField(db_column="CREATED_DATE") 
    short_abstract = models.CharField(blank=True, null=True, max_length=4000, db_column="SHORT_ABSTRACT") 
    teaser = models.TextField(blank=True, null=True, max_length=512, db_column="TEASER") 
    cacm_id = models.CharField(blank=True, null=True, max_length=12, db_column="CACM_ID") 
    cacm_ref = models.CharField(blank=True, null=True, max_length=512, db_column="CACM_REF") 
    cacm_only = models.CharField(blank=True, null=True, max_length=1, db_column="CACM_ONLY") 
    article_type = models.CharField(blank=True, null=True, max_length=32, db_column="ARTICLE_TYPE") 
    article_url = models.TextField(blank=True, null=True, max_length=128, db_column="ARTICLE_TYPE") 

    class Meta: 
     db_tablespace = "DLDATA" 
     db_table = "ARTICLES" 
     managed = False 

ich habe noch nie mit einer Oracle-Datenbank gearbeitet, also bin ich nicht sicher, wie dieses Problem zu debuggen. Ich bin mir sicher, dass mein Benutzer die Berechtigung hat, die Tabelle anzuzeigen, weil ich sie mit Navicat ansehen kann. Irgendwelche Hinweise, wie ich dieses Problem beheben kann?

+0

Verwenden Sie mehrere Datenbanken? – mbarkhau

Antwort

6

Dieser Fehler wird durch einen Fehler in Django verursacht. Ich habe es wegen der Verwendung von Schemas in Oracle bekommen. Die Art, wie Sie dies (vorerst) umgehen können, ist:

class MyModel(models.Model): 
    # Model stuff...   

    class Meta: 
     # ... 
     db_table = '"DLDATA"."ARTICLES"'