【问题标题】:Django Migration Error With MSSQL Database With Schemas带有架构的 MSSQL 数据库的 Django 迁移错误
【发布时间】:2021-01-23 15:34:00
【问题描述】:

我刚刚开始为 Django 后端创建设置(全部在 Python 中)。我使用 MS SQL 并在 Linux 中运行我的 django 以连接到 MSSQL。设置数据库规范后,我遇到以下错误。

鉴于我的数据库有多个模式,我假设我必须告诉 django 在数据库中使用哪个模式,但我找不到正确的位置。

有什么想法吗?

我的设置:

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': 'MyDB',
        'HOST': '********',
        'PASSWORD': '**************',
        'AUTOCOMMIT': True,
        'USER': 'root',
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
            },
    },
}```

Error:

```django.db.migrations.exceptions.MigrationSchemaMissing: Unable to create the django_migrations table (('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server]Hello there. It looks like you're trying to create an object without specifying a schema name. Please create in a named schema, eg schemaname.tablename\r\n\t (50000) (SQLExecDirectW)"))```

【问题讨论】:

    标签: python sql-server django pymssql


    【解决方案1】:

    在您的代码中尝试 'NAME': schema name 而不是 'MyDB'。

    但是,我没有使用过 MSSQL,如果是 MYSQL,我只提到了模式名称。我相信一旦您指定了“主机”和“端口”,它应该连接到数据库。设置应如下所示:(希望有帮助)

    DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'HOST': '***********', # example 'dbserver.your-domain.com'
        'PORT': 'XXXX',
        'NAME': 'schema name',
        'USER': 'root', # always better to use project specific user
        'PASSWORD': '************',
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    },
    

    }

    【讨论】:

    • 所以这意味着我应该写 MyDB.MySchema?我以前试过这个,它会超时连接到 sql,因为它无法识别数据库名称。但是 MyDB 是 django 可以连接的有效名称,但无法在里面写入表,因为它不了解里面的模式(有多个)
    • 我尝试使用 django-db-prefix 并将 DB_PRE = 'xxx].[' 放入设置中。我在 webworks 上找到的这个技巧可以很好地添加模式。现在它可以为 django_migrations 表创建表了。但它未能创建内容类型表,因为此技巧在其迁移文件夹中的 0001_initial.py 中不起作用。我真的不知道它是怎么解决的......
    • 正在应用 contenttypes.0001_initial...Traceback(最近一次调用最后一次):pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Driver 17 for SQL Server][SQL Server ]'.' 附近的语法不正确。(102) (SQLExecDirectW)")
    【解决方案2】:

    我遇到了同样的问题,解决方案是创建一个新的数据库用户,并将默认架构设置为您打算使用的架构。然后在您的 settings.py 中使用新的数据库用户和登录详细信息

    CREATE LOGIN djangoLogin WITH password='XXXXXXXXXXX';
    
    CREATE USER djangoUser FROM LOGIN djangoLogin WITH DEFAULT_SCHEMA = yourSchema;
    
    EXEC sp_addrolemember 'db_owner', 'djangoUser';
    
    
    DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'HOST': '***********', # example 'dbserver.your-domain.com'
        'PORT': 'XXXX',
        'NAME': 'database name',
        'USER': 'djangoLogin',
        'PASSWORD': '************',
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    },
    }
    

    【讨论】:

      猜你喜欢
      • 2018-10-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-11-03
      • 2015-08-08
      • 2021-08-30
      • 1970-01-01
      • 2018-11-01
      相关资源
      最近更新 更多