我有一个使用 pyodbc 的 python 脚本,它连接到远程服务器,并在其上运行 sql 服务器。我有一个使用 sqlalchemy 编写的函数的包,我可以在我的一台计算机上使用它。我用这个字符串连接:
driver = 'SQL+Server+Native+Client+11.0'
engine_string = prefix + '://' + username + ':' + password + '@' + server + '/' + database + '?driver=' + driver
在另一台计算机上,我无法安装本机客户端 11.0,我知道该客户端已被弃用。我尝试将值切换为
driver = 'ODBC+Driver+18+for+SQL+Server'
我在该版本中遇到错误
[ODBC Driver 18 for SQL Server]SSL Provider: The certificate chain was issued by an authority that is not trusted.
然后我尝试使用 Windows 实用程序进行通用 odbc 连接,但得到了相同的错误。当我检查“信任服务器证书”时,我能够使 odbc 管理器连接正常工作
从长远来看,这可能不太好,但是有没有办法将该属性添加到上面的第一个字符串中?我尝试了几种变体,但没有任何效果。
我能够与以下内容建立工作连接:
cnxn = pyodbc.connect(
driver = '{ODBC Driver 18 for SQL Server}',
server = server,
database = database,
uid = username,
pwd = password,
encrypt='no',
trust_server_certificate='yes')
但是该连接不适用于我想要使用的软件包。 谢谢!
连接错误是由于最新版本的 SQL Server 驱动程序(ODBC v18+、JDBC v10+、.Net Microsoft.Data.SqlClient v4.0+)的默认行为发生更改所致。
要使用的正确 ODBC 关键字是 TrustServerCertificate
只需用与号 (&) 分隔任何额外的参数。 当内部生成 pyodbc 连接字符串时,这些将被转换为分号
e=create_engine(“your args&Trusted_Connection=yes&TrustedServerCertificate=yes”)
要禁用 SSL,您只需使用:
连接字符串= f"{self.db_type}://{self.username}:{self.password}@{self.host}/{self.database}?driver={self.driver}&Encrypt=no"
最后,
self.engine = create_engine(connection_string)
它在 SQL Server 的 ODBC 驱动程序 18 中工作。