连接正忙于处理另一个命令的结果,同时正在使用 MARS 连接

scn*_*erd 4 python sql-server django

在 Django 中尝试使用dumpdata以下命令时:

python manage.py dumpdata --all --output /data/django_dump.json --verbosity 3
Run Code Online (Sandbox Code Playgroud)

我收到以下错误:

CommandError: Unable to serialize database: ('HY000', '[HY000] [Microsoft][ODBC Driver 17 for SQL Server]Connection is busy with results for another command (0) (SQLExecDirectW)')
Exception ignored in: <generator object _cursor_iter at 0x7f1c4112b0c0>
Traceback (most recent call last):
  File "/opt/conda/lib/python3.7/site-packages/sql_server/pyodbc/compiler.py", line 133, in _cursor_iter
    cursor.close()
  File "/opt/conda/lib/python3.7/site-packages/sql_server/pyodbc/base.py", line 500, in close
    self.cursor.close()
pyodbc.ProgrammingError: The cursor's connection has been closed.
Run Code Online (Sandbox Code Playgroud)

根据这篇文章的建议,这是我的数据库配置:

DATABASES = {
    'default': {
        'NAME': ...,
        'ENGINE': 'sql_server.pyodbc',
        'HOST': ...,
        'USER': ...,
        'PASSWORD': ...,
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
            'MARS_Connection': True,
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

使用 MARS 连接似乎根本没有帮助。是我的配置错误吗?还有其他原因这可能不起作用吗?

Python>=3.6,Django>=2,使用 MS SQL Server(不确定哪个版本,没有太旧的版本)和来自 conda-forge 的 django-pyodbc-azure。

lha*_*amp 7

我尝试设置 MARS_Connection 参数,这就是最终起作用的(Django 3.0,django-mssql-backend 2.8.1),即放入'extra_params': 'MARS_Connection=Yes'选项内部:

DATABASES = {
    'default': {
        'ENGINE': 'sql_server.pyodbc',
        'NAME': os.getenv('DB_NAME'),
        'USER': os.getenv('DB_USER'),
        'PASSWORD': os.getenv('DB_PASSWORD'),
        'HOST': os.getenv('DB_HOST'),
        'PORT': os.getenv('DB_PORT'),
        'TEST': {
            'NAME': os.getenv('DB_NAME'),
        },
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
            'extra_params': 'MARS_Connection=Yes'
        },
    }
}
Run Code Online (Sandbox Code Playgroud)