【问题标题】:Introspection Bug - Looks for django_migrations at the Database Level Instead of Schema LevelIntrospection Bug - 在数据库级别而不是架构级别查找 django_migrations
【发布时间】:2018-01-26 18:58:50
【问题描述】:

更新 6: 在讨论了 IRC #django 上的问题后,我认为 django-pyodbc-azure 正在自省数据库并在数据库级别而不是架构级别寻找 django_migrations。因此,它在数据库级别(来自原始应用程序)找到它,因此无法创建它。这可能是django-pyodbc-azure自省的一个bug。

更新 5: 我已经对架构进行了三次检查,除了名称之外它们是相同的。我还将django-pyodbc-azuredjango 更新到了最新的1.11 版本。我很茫然。

更新 4: 我在新架构中添加了一个名为 django_migrations 的表,错误更改为 invalid column name 'app'。所以看起来这些表格最初应该在那里。但是,正如我在最初的问题中提到的,这是不可能的,而不是过去的做法。

更新 3: 除了原始项目的架构(已经有表,包括 django_migrations)之外,没有其他架构可以工作。创建该架构时,在运行 python manage.py runserver 之类的内容之前,其中没有任何表。

更新 2: 架构差异是根本问题。我将原始用户的默认架构更改为我希望新应用使用的新默认架构,并且发生了同样的错误。为什么一种架构有效,而另一种则无效?

更新:这似乎是不同用户的问题。两个用户都具有相同的 SQL Server 权限。每个用户都有一个为此目的而创建的不同默认模式。原始项目的用户在数据库中已有表(包括 django_migrations)。

原文:

Python:3.6.4

django:1.11.9

django-pyodbc-azure:1.11.9

我有一个 django 项目 (myProject) 和一个 django 应用程序 (myApp)。此项目在包含django-pyodbc-azure 以连接到 SQL Server 的 conda 环境中运行。

对默认设置所做的唯一更改如下:

  1. myApp.apps.MyAppConfig 添加到INSTALLED_APPS
  2. DATABASES 更改为:

    DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'HOST': 'hostname',
        'NAME': 'databasename',
        'USER': 'username',
        'PASSWORD': 'password',
        'OPTIONS': {
            'driver': 'SQL Server Native Client 11.0'
        },
    },
    }
    

当我尝试运行python manage.py runserver时,出现以下错误:

Microsoft Windows [Version 6.1.7601]
Copyright (c) 2009 Microsoft Corporation.  All rights reserved.

C:\pathtodjangoproject\myProject>activate myApp

(myApp) C:\pathtodjangoproject\myProject>python manage.py runserver
Performing system checks...

System check identified no issues (0 silenced).
Unhandled exception in thread started by <function check_errors.<locals>.wrapper
 at 0x000000000422A378>
Traceback (most recent call last):
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\db
\backends\utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\sql_serve
r\pyodbc\base.py", line 545, in execute
    return self.cursor.execute(sql, params)
pyodbc.ProgrammingError: ('42S02', "[42S02] [Microsoft][SQL Server Native Client
 11.0][SQL Server]Invalid object name 'django_migrations'. (208) (SQLExecDirectW
)")

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\ut
ils\autoreload.py", line 228, in wrapper
    fn(*args, **kwargs)
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\co
re\management\commands\runserver.py", line 128, in inner_run
    self.check_migrations()
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\co
re\management\base.py", line 422, in check_migrations
    executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\db
\migrations\executor.py", line 20, in __init__
    self.loader = MigrationLoader(self.connection)
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\db
\migrations\loader.py", line 52, in __init__
    self.build_graph()
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\db
\migrations\loader.py", line 209, in build_graph
    self.applied_migrations = recorder.applied_migrations()
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\db
\migrations\recorder.py", line 66, in applied_migrations
    return set(tuple(x) for x in self.migration_qs.values_list("app", "name"))
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\db
\models\query.py", line 250, in __iter__
    self._fetch_all()
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\db
\models\query.py", line 1118, in _fetch_all
    self._result_cache = list(self._iterable_class(self))
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\db
\models\query.py", line 122, in __iter__
    for row in compiler.results_iter(chunked_fetch=self.chunked_fetch):
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\db
\models\sql\compiler.py", line 841, in results_iter
    results = self.execute_sql(MULTI, chunked_fetch=chunked_fetch)
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\db
\models\sql\compiler.py", line 899, in execute_sql
    raise original_exception
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\db
\models\sql\compiler.py", line 889, in execute_sql
    cursor.execute(sql, params)
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\db
\backends\utils.py", line 79, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\db
\backends\utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\db
\utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\ut
ils\six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\django\db
\backends\utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "C:\pathtoanaconda\anaconda\envs\myApp\lib\site-packages\sql_serve
r\pyodbc\base.py", line 545, in execute
    return self.cursor.execute(sql, params)
django.db.utils.ProgrammingError: ('42S02', "[42S02] [Microsoft][SQL Server Nati
ve Client 11.0][SQL Server]Invalid object name 'django_migrations'. (208) (SQLEx
ecDirectW)")

为什么会出现这个问题,我该如何解决?似乎它正在数据库中寻找django_migrations,但尚未创建任何表。实际上,无法创建表,因为python manage.py makemigrations 会导致同样的错误。

这是我构建的第二个 django 项目。第一个使用相同的DATABASES 设置(除了作为不同的用户获得不同的默认模式)和相同的环境完美运行。

【问题讨论】:

    标签: python sql-server django python-3.x django-pyodbc-azure


    【解决方案1】:

    您是否创建了数据库?如果我没记错的话,您需要手动执行此操作。另请参阅此问题:https://github.com/michiya/django-pyodbc-azure/issues/103

    【讨论】:

    • 数据库已经存在,是的。这是我们的主数据库,我只为用户名设置了默认模式。这与我处理上一个项目的方式相同。
    猜你喜欢
    • 2023-03-22
    • 2018-03-02
    • 2019-05-28
    • 1970-01-01
    • 2011-05-10
    • 2023-03-14
    • 2018-10-20
    • 1970-01-01
    • 2021-06-25
    相关资源
    最近更新 更多