无法连接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
相关产品推荐
相关产品推荐

