J'utilise Django avec une base de données Oracle à distance, et d'obtenir un « tableau n'existe pas » erreur
-
09-10-2019 - |
Question
Chaque fois que j'exécutons une requête simple en utilisant Django ORM sur une table dans la base de données Oracle à distance, je reçois cette erreur:
>>> 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
Voici le modèle que je utilise:
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
Je ne l'ai jamais travaillé avec une base de données Oracle avant, donc je ne suis pas certain de la façon de déboguer cette question. Je suis sûr que mon utilisateur dispose des droits pour voir la table parce que je peux regarder en utilisant Navicat. Toute indication quant à la façon dont je peux résoudre ce problème?
La solution
Cette erreur est causée par un bogue dans Django. Je recevais à cause de l'utilisation d'Oracle dans Schemas. La façon dont vous contourner ce (pour l'instant) est:
class MyModel(models.Model):
# Model stuff...
class Meta:
# ...
db_table = '"DLDATA"."ARTICLES"'
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow