我正在尝试使用pyodbc连接python中的SQL服务器。我无法连接,因为我的数据库是ReadOnly。我尝试了other link提供的解决方案
import pyodbc
readonly_conn_str = "DRIVER={SQL Server};SERVER=...; DATABASE=...;readonly=True;"
conn = pyodbc.connect(readonly_conn_str)
但是,我仍然收到以下错误:
ProgrammingError:(“42000”,“42000ODBCSQLServer DriverThe目标数据库('PRMOperationalDB')”位于可用性组中,当应用程序意图设置为只读时,当前可供连接访问。有关应用程序意图的详细信息,请参阅Server联机丛书。(978) (SQLDriverConnect);42000ODBCSQLServer DriverInvalid连接字符串属性(0);42000ODBC Server目标数据库('PRMOperationalDB')位于可用性组中,当应用程序意图设置为只读时,可对连接进行访问。有关应用程序意图的详细信息,请参阅Server联机丛书。(978);42000 string DriverInvalid连接字符串属性(0)“
对于如何解决这个问题,有什么建议吗?
发布于 2022-04-25 21:19:19
readonly=True
是pyodbc的connect()
方法的一个属性,而不是传递给Server的连接字符串的一部分。IMHO只尝试传递所有属性,而不是构建完整的连接字符串:
conn = pyodbc.connect(driver='{SQL Server}', host=<server>, database=<db>,
trusted_connection='yes', user='', password='', readonly = True)
或者,就像the answer you mentioned提供的那样,使用:
conn = pyodbc.connect('driver={ODBC Driver 17 for SQL Server};'
+ 'SERVER=...;DATABASE=...;'
+ 'UID=' + user + ';PWD=' + password + ';'
+ 'ApplicationIntent=ReadOnly')
另外,您是否有意显式地连接到辅助设备?为什么不连接到AG名称,如果您的应用程序只执行读取操作,那么最糟糕的情况(比如说,有人破坏了只读路由)是,这些读取操作发生在主服务器上。您的代码永远不应该连接到特定的物理主机/集群节点,并假定它永远是只读的辅助节点.如果明天有故障转移会发生什么?谁在更新所有的连接字符串?
https://stackoverflow.com/questions/72005745
复制相似问题