首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >无法从Docker Django连接到Sql Server

无法从Docker Django连接到Sql Server
EN

Stack Overflow用户
提问于 2021-10-21 12:05:46
回答 1查看 85关注 0票数 0

我正在尝试将我的Django连接到现有的遗留MS SQL数据库。

当我尝试在数据库上运行sql时,运行正常:

代码语言:javascript
复制
sql = 'SELECT * FROM ' + db_name + '.INFORMATION_SCHEMA.TABLES'
connection_string = "driver=FreeTDS;server={};PORT={} database={};UID={};PWD={};TDS_Version=8.0;".format(db_host, db_port, db_name, db_user, db_password)
conn = pyodbc.connect(connection_string, autocommit=True)
for row in cursor.fetchall():
  print(row)

我可以看到所有的表,但当我尝试从数据库生成模型时,运行以下命令:

代码语言:javascript
复制
python manage.py inspectdb --database pirineos > pirineos_models.py

我得到了错误:

代码语言:javascript
复制
django.db.utils.Error: ('08001', '[08001] [FreeTDS][SQL Server]Unable to connect to data source (0) (SQLDriverConnect)')

这些是我的项目文件。

Dockerfile:

代码语言:javascript
复制
FROM python:3.8-slim-buster
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
RUN apt-get update -y && apt-get install -y unixodbc unixodbc-dev tdsodbc freetds-common freetds-bin freetds-dev && apt-get clean && rm -rf /var/lib/apt/lists/*
RUN mkdir /djangonoguero
COPY ./project /djangonoguero/
COPY ./requirements.txt /djangonoguero/
ADD odbcinst.ini /etc/
WORKDIR /djangonoguero
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 8000

requirements.txt:

代码语言:javascript
复制
pyodbc==3.0.10
django-mssql-backend==2.8.1

settings.py:

代码语言:javascript
复制
DATABASES = {
  'pirineos': {
    'ENGINE': 'sql_server.pyodbc',
    'NAME': DB_PIRINEOS_NAME,
    'USER': DB_PIRINEOS_USER,
    'PASSWORD': DB_PIRINEOS_PASSWORD,
    'HOST': DB_PIRINEOS_HOST,
    'PORT': DB_PIRINEOS_PORT,
    'OPTIONS': {
      'driver': 'FreeTDS',
      'unicode_results': True,
      'driver_supports_utf8' : True,
      'extra_params': 'tds_version=8.0;',
    },
  },
}

odbcinst.ini:

代码语言:javascript
复制
[FreeTDS]
Description=FreeTDS Driver for Linux & MSSQL on Win32
Driver=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
UsageCount=1
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-25 14:31:20

已解决

Dockerfile:

代码语言:javascript
复制
FROM python:3.8-slim-buster
ENV PYTHONDONTWRITEBYTECODE 1
ENV PYTHONUNBUFFERED 1
ENV DEBIAN_FRONTEND noninteractive
ADD odbcinst.ini /etc/
RUN apt-get update -y && apt-get install -y curl gnupg
RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -
RUN curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list
RUN apt-get update -y && apt-get install -y unixodbc unixodbc-dev tdsodbc freetds-common freetds-bin freetds-dev postgresql python-scipy python-numpy python-pandas
RUN apt-get update && ACCEPT_EULA=Y apt-get -y install mssql-tools msodbcsql17
RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
RUN echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
RUN apt-get update
RUN mkdir /djangonoguero
COPY ./project /djangonoguero/
COPY ./requirements.txt /djangonoguero/
WORKDIR /djangonoguero
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 8000

odbcinst.ini:

代码语言:javascript
复制
[FreeTDS]
Description=FreeTDS Driver
Driver=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Setup=/usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so

settings.py:

代码语言:javascript
复制
'pirineos': {
  'ENGINE': 'sql_server.pyodbc',
  'NAME': DB_PIRINEOS_NAME,
  'USER': DB_PIRINEOS_USER,
  'PASSWORD': DB_PIRINEOS_PASSWORD,
  'HOST': DB_PIRINEOS_HOST,
  'PORT': DB_PIRINEOS_PORT,
  'OPTIONS': {
    'driver': 'FreeTDS',
    'unicode_results': True,
    'host_is_server': True,
    'driver_supports_utf8': True,
    'extra_params': 'tds_version=7.4',
  },
},
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69661683

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档