我将 Django 与远程 Oracle 数据库一起使用,并收到“表不存在”消息错误

发布于 2024-10-11 18:16:31 字数 4245 浏览 2 评论 0原文

每当我使用 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

顾铮苏瑾 2024-10-18 18:16:31

此错误是由 Django 中的错误引起的。我之所以得到它是因为 Oracle 中使用了模式。解决这个问题的方法(目前)是:

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

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

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"'
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文