我将 Django 与远程 Oracle 数据库一起使用,并收到“表不存在”消息错误
每当我使用 Django ORM 对远程 Oracle 数据库中的表执行简单查询时,都会收到此错误:
>>> 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
这是我正在使用的模型:
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
我以前从未使用过 Oracle 数据库,因此我不确定如何调试这个问题。我确信我的用户有权查看该表,因为我可以使用 Navicat 查看它。关于如何解决这个问题有任何提示吗?
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?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
此错误是由 Django 中的错误引起的。我之所以得到它是因为 Oracle 中使用了模式。解决这个问题的方法(目前)是:
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: