【问题标题】:pypyodbc connects with explicit string but not variablepypyodbc 与显式字符串连接但不是变量
【发布时间】:2017-03-02 17:02:36
【问题描述】:

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

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

如果我明确地将完全相同的字符串传递给光标,则连接工作正常。我需要对字符串变量做任何特定的事情才能使用它吗?

    randomstring = ShowConnString(self.cframe).connstringtext
    print(randomstring)
    self.conn = pypyodbc.connect(randomstring)
    #self.conn = pypyodbc.connect(driver='{SQL Server}', server='(local)', database='Audit', uid='sa', pwd='password')

编辑:打印(随机字符串)输出:

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

【问题讨论】:

  • edit您的问题准确显示您print(randomstring)时控制台中出现的内容。

标签: python odbc wxpython pypyodbc


【解决方案1】:

首先要注意的是,您的第二个(已注释掉)示例没有使用“显式 [连接] 字符串”连接,而是使用了一系列 关键字参数(“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 值的内容转换为正确的 ODBC 连接字符串,然后再将其传递给 .connect 方法。

【讨论】:

  • randomstring 现在正在输出 driver={SQL Server};server=(local);database=Audit;uid=sa;pwd=password 但我仍然遇到与 self.conn 相同的错误 - pypyodbc.connect(randomstring) 但使用以下显式调用它可以工作: self.conn = pypyodbc.connect('driver={SQL Server};server=(local);database=GermanAudit;uid=sa;pwd=_PWD4sa_')没看懂
  • 实际上,我认为文本框的值在返回之前带有换行符,当我将其打印到控制台时,它是从控制台屏幕顶部向下的一行
猜你喜欢
  • 1970-01-01
  • 2018-01-02
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 2015-05-05
  • 2012-06-24
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多