Django 和 SQL Server 的数据库配置 - 转义主机

问题描述 投票:0回答:1

我已将 Django 应用程序设置为使用 Microsoft SQL Server 数据库。这是我的数据库配置。

 DATABASES = {
    'default': {
        'ENGINE': 'mssql',
        'NAME': "reporting",
        'HOST': '192.168.192.225\SQL2022;',
        'PORT': 1433,
        'USER': "sa",
        'PASSWORD': "Root_1421",
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    }
}

SQL Server 数据库安装在我的桌面计算机上,

DESKTOP-RC52TD0\SQL2022
是主机\实例名称。当打印我的配置时,我得到以下信息。

{'default': {'ENGINE': 'mssql', 'NAME': 'reporting', 'HOST': 'DESKTOP-RC52TD0\\SQL2022', 'USER': 'sa', 'PASSWORD': 'Root_1421', 'OPTIONS': {'driver': 'ODBC Driver 17 for SQL Server'}}}

请注意,在 HOST 中,该值添加了两个斜杠,这导致我的应用程序无法连接到数据库。我相信这是因为 Python 的字符串转义功能。我怎样才能逃脱以便最终得到单斜线而不是双斜线?当我收到以下错误时:

django.db.utils.OperationalError: ('HYT00', '[HYT00] [Microsoft][ODBC Driver 17 for SQL Server]登录超时已过期 (0) (SQLDriverConnect)')

我尝试了以下方法,结果仍然相同:

  1. r'DESKTOP-RC52TD0\SQL2022'
  2. 'DESKTOP-RC52TD0\\SQL2022'
  3. r'DESKTOP-RC52TD0\SQL2022'

有什么想法可以让我在字典中逃脱。在字符串中添加双斜杠

\\
有效,但在字典中使用时无效。

我正在使用 docker-compose 运行该应用程序。

version: '3'

services:
  # sqlserver:
  #   image: mcr.microsoft.com/mssql/server
  #   hostname: 'sqlserver'
  #   environment:
  #     ACCEPT_EULA: 'Y'
  #     MSSQL_SA_PASSWORD: 'P@55w0rd'
  #   ports:
  #     - '1433:1433'
  #   volumes:
  #     - sqlserver-data:/var/opt/mssql
  web:
    image: landsoft/reporting-api
    network_mode: host
    build:
      context: ./app
    command: >
      sh -c "python manage.py migrate &&
             python manage.py runserver 0.0.0.0:8000"
    volumes:
      - ./app:/code
    ports:
      - "8000:8000"
    environment:
      - DB_HOST="DESKTOP-RC52TD0\SQL2022"
      - DB_NAME=reporting
      - DB_USER=sa
      - DB_PASSWORD=Root_1421
      - DB_PORT=1433
    # depends_on:
    #   - sqlserver
    
# volumes:
#   sqlserver-data:
#     driver: local
python sql-server django escaping
1个回答
0
投票

终于成功了。

DATABASES
配置中,我将
HOST
更改为使用 IP 地址和端口而不是实例名称。我还将“PORT”留空。

DATABASES = {
    'default': {
        'ENGINE': 'mssql',
        'NAME': 'reporting',
        'HOST': '192.168.211.225,56985', # use ip with port separated by comma
        'PORT': '', # left blank
        'USER': '...username..',
        'PASSWORD': '..password..',
        'OPTIONS': {
            'driver': 'ODBC Driver 17 for SQL Server',
        },
    }
}

这是我的dockerfile:

FROM ubuntu:18.04
ENV PYTHONUNBUFFERED 1
ENV DEBIAN_FRONTEND noninteractive

RUN apt-get update && apt-get install -y curl apt-transport-https python3 python3-pip python3-venv python-dev locales nano
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/ubuntu/18.04/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update && apt-get install -y gnupg2

# ODBC 17 DEPENDENCIES
ENV ACCEPT_EULA=Y
RUN apt-get update && apt-get -y install msodbcsql17 freetds-dev tdsodbc

RUN apt-get update && apt-get install mssql-tools
# Add the necessary commands for setting up the environment
RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
RUN /bin/bash -c "source ~/.bashrc"

RUN apt-get install -y unixodbc-dev

RUN mkdir /code
WORKDIR /code
ADD requirements.txt /code/


RUN python3 -m venv /venv
ENV PATH="/venv/bin:$PATH"
RUN /venv/bin/python -m pip install --upgrade pip && \
    /venv/bin/pip install -r requirements.txt -v

ADD . /code/

RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen
RUN locale-gen

这是我的requirements.txt 文件..

Django==3.2.23
mssql-django==1.3
djangorestframework>=3.12.4,<=3.13
drf-spectacular>=0.15.1,<=0.16
Pillow>=8.2.0,<=8.3.0
django-environ>=0.11.2,<=0.12

希望它可以帮助面临类似问题的人..

© www.soinside.com 2019 - 2024. All rights reserved.