【问题标题】:how to solve the connection problem with SQL Server如何解决与 SQL Server 的连接问题
【发布时间】:2019-08-19 09:31:20
【问题描述】:

我正在尝试使用 pyodbc 和 django 连接到我的 SQL Server 2016 数据库。

在 SQL 配置管理器中,我将所有网络配置都设置为 Enabled

  • 共享内存
  • 命名管道
  • TCP/IP

防火墙已关闭

我尝试使用 localhost 并且它工作正常,但是当我尝试连接到同一网络上的服务器时它不起作用并显示以下错误:

/connect/ 处的操作错误

('08001', '[08001] [微软][SQL Server Native Client 11.0]Named Pipes Provider: 无法打开 连接到 SQL Server [53]。 (53) (SQLDriverConnect); [08001] [Microsoft][SQL Server Native Client 11.0]登录超时过期(0); [08001] [Microsoft][SQL Server Native Client 11.0]与网络相关的或 建立连接时发生特定于实例的错误 到 SQL Server。服务器未找到或无法访问。检查是否 实例名称是正确的,并且如果 SQL Server 配置为允许 远程连接。有关详细信息,请参阅 SQL Server 联机丛书。 (53)')

我尝试检查服务器上的 ODBC 驱动程序并显示以下驱动程序:

  • 适用于 SQL Server 的 ODBC 驱动程序 13
  • SQL 服务器
  • SQL Server Native Client 11.0

我都试过了,但都没有成功。

views.py

from django.shortcuts import render
import pyodbc
# from .models import Artist
# Create your views here.

def connect(request):
    conn = pyodbc.connect('Driver={ODBC Driver for SQL Server};'
                      'Server=AB-INT-SQL;'
                      'Database=testDB;'
                      'Trusted_Connection=yes;')

    cursor = conn.cursor()
    c = cursor.execute('SELECT * FROM Artist')

    return render (request,'connect.html',{"c":c})

connect.html

{% for row in c %}
    {{ row }}
{% endfor %}

【问题讨论】:

  • 您是否在同一台服务器上运行多个 SQL 实例?
  • @ShekarKola 没有它的一台机器名称和默认实例,但有几个数据库。但我指定了所需的数据库

标签: sql-server database-connection pyodbc


【解决方案1】:

如果服务器上只安装了 1 个 SQL 实例,只需快速检查 telnet HOSTNAME 1433 以确认 SQL Server 接受默认端口号上的通信。

如果telnet 不起作用,请在防火墙中添加新规则(通过防火墙高级设置),端口号为1433 and 1434,即使已关闭防火墙。还是不行,重启 SQL 服务,然后查看 SQL 错误日志是否有消息(重启时间后必须出现以下消息)

服务器正在侦听 ['any' ipv4 1433]。

除此之外(一旦 telnet 测试有效),我相信您需要在连接字符串中使用 driver 作为您可能已经尝试过的 "Driver={SQL Server Native Client 11.0};"

编辑:SQL错误日志截图

【讨论】:

  • 我听从了你的回答,不知何故让我走上了正轨,但现在它显示另一个错误:('28000', '[28000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Login failed. The login is from an untrusted domain and cannot be used with Windows authentication. (18452) (SQLDriverConnect); [28000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]Login failed. The login is from an untrusted domain and cannot be used with Windows authentication. (18452)') 但它的 Windows 和 SQL 身份验证模式。
  • @DevDj,很高兴听到这个消息,如果您不担心避免使用windows authentication,请使用SQL authentication,这需要您相应地调整连接字符串。我相信,通过这样做 Trusted_Connection=no; 将允许您使用 SQL 身份验证,这会导致我们在连接字符串中手动添加 UIDPWD
  • 是的,SQL 服务器端必须是Mixed mode,但您需要更改我上一条评论中提到的连接字符串参数。 Trusted_Connection=no并添加用户名密码
  • @ Shekar Kola 我按照你在评论中的建议做了并添加了 UID 和 PWD 但它显示 login failed for user 'test' ... 但我能够在 SSMS 上创建连接
  • 你能不能打开SQL错误日志,看看failed login的原因。添加截图供您参考:
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-27
  • 1970-01-01
  • 2023-03-21
  • 1970-01-01
  • 1970-01-01
  • 2010-11-19
相关资源
最近更新 更多