开发者

I'm using Django with a remote Oracle database, and getting a "Table does not exist" error

Whenever I execute a simple query using the Django ORM on a table in the remote Oracle database, I get this error:

>>> 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

Here's the model I'm using:

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

I've never worked with an Oracle database before, so I'm unsure as to how to debug this issue. I'm sure that my user has privileges to view the table because I can look at it using Navicat. Any hints as to how I can fix this issue?


This error is being caused by a bug in Django. I was getting it because of the use of Schemas in Oracle. The way you get around this (for now) is:

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

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜