Ошибка самоанализа — поиск django_migrations на уровне базы данных, а не на уровне схемы

Обновление 6: после обсуждения проблемы в IRC #django я думаю, что django-pyodbc-azure изучает базу данных и ищет django_migrations на уровне базы данных, а не на уровне схемы. Поэтому он находит его на уровне базы данных (из исходного приложения) и поэтому не может его создать. Это может быть ошибка в самоанализе django-pyodbc-azure.

Обновление 5: я трижды проверил схемы, и они идентичны, кроме названия. Я также обновил django-pyodbc-azure и django до последних версий 1.11. Я в недоумении.

Обновление 4: я добавил таблицу с именем django_migrations в новую схему, и ошибка изменилась на invalid column name 'app'. Таким образом, кажется, что таблицы изначально должны быть там. Однако, как упоминалось в моем первоначальном вопросе, это невозможно, а не так, как это делалось в прошлом.

Обновление 3: никакая другая схема не работает, кроме схемы исходного проекта (в котором уже есть таблицы, включая django_migrations). Когда эта схема была создана, в ней не было никаких таблиц до запуска таких вещей, как python manage.py runserver.

ОБНОВЛЕНИЕ 2: разница в схеме является основной проблемой. Я изменил схему по умолчанию исходного пользователя на новую схему по умолчанию, которую я хочу использовать в новом приложении, и произошла та же ошибка. Почему одна схема работает, а другая нет?

ОБНОВЛЕНИЕ: похоже, это проблема с разными пользователями. Оба пользователя имеют одинаковые разрешения SQL Server. У каждого пользователя есть своя схема по умолчанию, созданная для этой цели. У пользователя исходного проекта уже есть таблицы (включая django_migrations) в базе данных.

Оригинал:

Питон: 3.6.4

Джанго: 1.11.9

джанго-pyodbc-лазурь: 1.11.9

У меня есть проект django (myProject) с одним приложением django (myApp). Этот проект выполняется в среде conda, которая включает django-pyodbc-azure для подключения к SQL Server.

Единственные изменения, сделанные по сравнению с настройками по умолчанию, следующие:

  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 (помимо другого пользователя, чтобы получить другую схему по умолчанию) и в той же среде.


person OverflowingTheGlass    schedule 26.01.2018    source источник


Ответы (1)


Вы создали базу данных? Если я правильно помню, вам нужно сделать это вручную. Также см. эту проблему: https://github.com/michiya/django-pyodbc-azure/issues/103

person Dhaval Anjaria    schedule 26.01.2018
comment
база данных уже существует, да. это наша основная база данных, у меня просто установлена ​​схема по умолчанию для имени пользователя. это так же, как я справился с предыдущим проектом без проблем. - person OverflowingTheGlass; 26.01.2018