繁体   English   中英

如何从 dockerized python 应用程序连接到本地 sql server 数据库

[英]How to connect to local sql server database from dockerized python app

我正在尝试从 dockerized python 容器连接到本地计算机上长期运行的 SQL Server 数据库,但我不断收到以下错误。 我也会添加所有相关代码。 我可以确认,我的用户名和密码都是正确的(我已经验证了 10 多次,并在服务器和数据库上设置了一个具有完全权限的新帐户)。

我在最后一天搜索了堆栈溢出和文章,但没有人给我任何不同的东西,所以我希望这里有人能提供一些信息,为我指明正确的方向。 如果您需要更多信息,请告诉我。

pyodbc.ProgrammingError: ('42000', "[42000] [FreeTDS][SQL Server]Login failed for user 'myusername'. (18456) (SQLDriverConnect)")

这是我的码头文件

FROM python:3.7

RUN echo "[FreeTDS]\n\
Description = FreeTDS unixODBC Driver\n\
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so\n\
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so" >> /etc/odbcinst.ini

RUN apt-get update \
 && apt-get install unixodbc -y \
 && apt-get install unixodbc-dev -y \
 && apt-get install freetds-dev -y \
 && apt-get install freetds-bin -y \
 && apt-get install tdsodbc -y \
 && apt-get install --reinstall build-essential -y

RUN pip install --trusted-host pypi.python.org pyodbc==4.0.26 

WORKDIR /app
COPY requirements.txt .
RUN pip install -r requirements.txt

COPY src/. .

CMD ["python", "main.py"]

这是 main.py

import pyodbc

try:
  sql_connection = pyodbc.connect('Driver={FreeTDS};'
                                  'Server=host.docker.internal,1433;'
                                  'Database=mydatabasename;' 
                                  'UID=myusername;'
                                  'PWD=mypassword')
  sql_cursor = sql_connection.cursor()
  sql_cursor.execute("Select @@version")

  print(sql_cursor.fetchone())
finally:
  sql_cursor.close()
  sql_connection.close()

我首先尝试使用 SQL 客户端(psql、mysql-client 无论你拥有什么数据库)从正在运行的 docker 容器(通过 docker exec)内部连接到这个数据库,并确认你可以做到。 如果不是很明显,数据库级别不允许连接,则数据库设置中可能只允许 127.0.0.1

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM