【发布时间】:2021-05-12 16:29:19
【问题描述】:
我正在尝试使用下面的代码从另一个域连接到它,但我收到了这样的错误
InterfaceError: (pyodbc.InterfaceError) ('28000', '[28000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]登录失败。 登录来自不受信任的域,不能用于 集成身份验证。 (18452) (SQLDriverConnect); [28000] [Microsoft][ODBC Driver 13 for SQL Server][SQL Server]登录失败。 登录来自不受信任的域,不能用于 集成身份验证。 (18452)')(此错误的背景: http://sqlalche.me/e/13/rvf5)
这是我正在使用的代码:
import pyodbc
from sqlalchemy import create_engine
server = 'shul'
database = 'db_pre'
uid = 'pre'
pwd = 'pr@20si'
engine = create_engine('mssql+pyodbc://' + server + '/' + database + '/' + uid + '/' + pwd + '?trusted_connection=no&driver=ODBC+Driver+13+for+SQL+Server')
#engine = create_engine('mysql://root:@localhost/daming') # enter your password and database names here
col_names = ["month", "price", "change"]
df = pd.read_csv("kcl.csv",sep=',',quotechar='\'',encoding='utf8', names=col_names,skiprows = 1) # Replace Excel_file_name with your excel sheet name
df.to_sql('kcl',con=engine,index=False,if_exists='replace') # Replace Table_name with your sql table name
在 SQL Server Management Studio 中,我使用 SQL Server 身份验证而不是 Windows 身份验证。
请帮助我。提前谢谢你。
【问题讨论】:
-
server、database、uid和pwd的顺序看起来不正确。我把它放在一个 f-string 中试图让它更清晰。f'mssql+pyodbc://{uid}:{pid}@{server}/{database}?driver=ODBC+Driver+13+for+SQL+Server;Trusted_Connection=no' -
也刚刚注意到您密码中的
@。如果您的密码中包含该密码,则会导致问题。 -
@PGHE 谢谢!但我仍然遇到同样的错误,我试图像这样更改密码 pwd = 'predik@2021si'.format(pwd='predikpwd') 是的,它仍然是同样的错误
-
@adindaaulia 1) 为什么这么老的司机?为什么不是 v. 17 ?2) 问题是由使用 URL 和 SQL Alchemy 而不是 PyODBC 引起的。 The pyodbc example 不使用 URL
-
@adindaaulia 如果您使用来自字符串的 URL,则需要确保每个部分都经过 URL 编码。您不能只连接可能包含特殊字符(如
@或/或#)的字符串。很可能是一个意外字符使 SQL Alchemy 忽略用户/密码对及其后的所有内容,并使用默认(并且更安全)机制 Windows 身份验证进行连接
标签: python sql-server sqlalchemy pyodbc