Estoy usando Django con una base de datos Oracle remota, y obtener una “tabla no existe” error

StackOverflow https://stackoverflow.com/questions/4651312

Pregunta

Cada vez que ejecuta una consulta sencilla utilizando el ORM de Django en una tabla en la base de datos Oracle remota, me sale este 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

Este es el modelo que estoy usando:

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

Nunca había trabajado con una base de datos Oracle antes, así que estoy seguro de cómo depurar este problema. Estoy seguro de que mi usuario tiene privilegios para ver la tabla porque puedo mirarlo utilizando Navicat. Ninguna pista en cuanto a cómo puedo solucionar este problema?

¿Fue útil?

Solución

Este error está causado por un error en Django. Me estaba poniendo a causa de la utilización de esquemas de Oracle. La forma en que recibe alrededor de este (por ahora) es:

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

    class Meta:
        # ...
        db_table = '"DLDATA"."ARTICLES"'
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top