You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

无法连接pymssql报18456错误,求连接语法及用户名获取方法

解决pymssql连接报错18456的问题

你的当前代码大概率行不通,报错18456是SQL Server的登录失败典型错误,核心问题是你的连接参数没遵循SQL Server的身份验证规则——毕竟它和MySQL的连接逻辑差异很大。

先拆解你的代码问题

你写的这段连接代码:

import pymssql 
conn = pymssql.connect(server='GABRIEL-PC', user='GABRIEL@GABRIEL-PC', password='', database='mydb')

这里的user参数格式完全不对,而且SQL Server有两种身份验证方式,你搞混了规则:

  • 如果想用Windows身份验证(也就是用当前登录Windows的账号访问SQL Server),根本不需要填user和password,而是要加trusted_connection=True这个参数。
  • 如果想用SQL Server身份验证,用户名得是你在SQL Server里创建的独立登录账号(比如默认的sa,或者你自己新建的账号),不是Windows用户名@机器名这种格式。

另外要注意:SQL Server默认安装时会生成一个命名实例(比如SQLEXPRESS),所以你的server参数可能需要写成GABRIEL-PC\SQLEXPRESS,不然可能找不到正确的服务进程。

给你两种正确的连接写法

1. Windows身份验证(推荐,如果你平时用Windows账号登录SQL Server)

import pymssql
conn = pymssql.connect(
    server='GABRIEL-PC\SQLEXPRESS',  # 如果是默认实例可以直接写GABRIEL-PC
    database='mydb',
    trusted_connection=True
)

2. SQL Server身份验证(如果你设置了独立的SQL登录账号)

import pymssql
conn = pymssql.connect(
    server='GABRIEL-PC\SQLEXPRESS',
    user='你的SQL登录名',  # 比如sa或者你创建的自定义账号
    password='账号对应的密码',
    database='mydb'
)

怎么获取正确的用户名?

  • 打开SQL Server Management Studio(SSMS),如果能通过Windows身份验证登录进去,左侧展开安全性>登录名,里面列出的就是所有可用的SQL Server登录账号。
  • 如果你是用Windows账号访问数据库,直接用上面第一种写法的trusted_connection=True就好,不用单独指定用户名。

为什么MySQL连接没问题?

因为MySQL的连接字符串是URI格式,和pymssql的单独传参逻辑完全不同,你写的conn = (server='mysql://root:@localhost/mydb')适配了MySQL的规则,但不能直接套用到SQL Server上。

内容的提问来源于stack exchange,提问作者Gabriel_Koch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:57:25