django - 我将 Django 与远程 Oracle 数据库一起使用,并收到 "Table does not exist"错误

标签 django oracle multiple-databases ora-00942

每当我使用 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 查看它。有关如何解决此问题的任何提示吗?

最佳答案

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

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

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

关于django - 我将 Django 与远程 Oracle 数据库一起使用,并收到 "Table does not exist"错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4651312/

相关文章:

c# - .NET 迁移 : Setup and migrate multiple databases at runtime

oracle - 无法使用 BULK COLLECT 和 FORALL 编译 PL/SQL

ruby-on-rails - URI::InvalidURIError:使用多个数据库部署 HEROKU 应用程序时,错误的 URI(不是 URI?)

mysql - 使用事务轨在同一操作 Controller 中对多个数据库进行查询?

django - BooleanField 复选框无法使用 bootstrap 正确呈现出crispy_forms

java.sql.SQLException : ORA-01843: not a valid month 异常

oracle - 对只有 5 个不同值的列进行索引 - 值得吗?

python - 管理员中缺少 Django 模型类

python - python manage.py migrate 出现问题 -> 没有名为 psycopg2 的模块

python - Django:子查询的注解