我已将 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)')
我尝试了以下方法,结果仍然相同:
r'DESKTOP-RC52TD0\SQL2022'
'DESKTOP-RC52TD0\\SQL2022'
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
终于成功了。
在
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
希望它可以帮助面临类似问题的人..