pypyodbc连接显式字符串但不是变量

时间:2017-03-02 17:02:36

标签: python odbc wxpython pypyodbc

我正在从用户那里读取SQL Server数据库的连接字符串,这里用randomstring表示。当我将randomstring打印到控制台时,它看起来很完美,我已经检查了十几次。但是,连接失败并带有

pypyodbc.Error:(' IM002',' [IM002] [Microsoft]

如果我将完全相同的字符串显式传递给游标,则连接正常。我是否需要对字符串变量进行特定的操作才能使用它?

free

编辑:print(randomstring)输出:

pypyodbc.connect(driver =' {SQL Server}',server ='(local)',database =' Audit',uid =& #39; sa',pwd ='密码')

1 个答案:

答案 0 :(得分:2)

首先要注意的是,你的第二个(注释掉的)示例没有连接"显式[连接]字符串",它使用了一系列关键字参数 (" kwargs")指定driverserver等。注意关键字参数形式之间的细微差别......

self.conn = pypyodbc.connect(driver='{SQL Server}', server='(local)', database='Audit', uid='sa', pwd='password')

...和连接字符串形式:

self.conn = pypyodbc.connect('driver={SQL Server};server=(local);database=Audit;uid=sa;pwd=password')

现在,如果您的randomstring变量确实包含

pypyodbc.connect(driver='{SQL Server}', server='(local)', database='Audit', uid='sa', pwd='password')

那么它肯定不是一个有效的ODBC连接字符串。即使它只包含

driver='{SQL Server}', server='(local)', database='Audit', uid='sa', pwd='password'

仍然不是有效的连接字符串,因为项目以逗号(不是分号)分隔,并且值周围有引号。在将randomstring值传递给.connect方法之前,您需要将In [220]: arr = np.arange(5*5*3).reshape(5,5,3) 值的内容转换为正确的ODBC连接字符串。