Python PyODBC使用显式字符串连接,但不使用变量

Python PyODBC使用显式字符串连接,但不使用变量,python,odbc,wxpython,pypyodbc,Python,Odbc,Wxpython,Pypyodbc,我正在从用户处读取SQL Server数据库的连接字符串,这里用randomstring表示。当我把随机字符串打印到控制台上时,它看起来很完美,我已经检查了十几次了。但是,连接失败,原因是 pyodbc.Error:('IM002','[IM002][Microsoft] 如果我显式地将完全相同的字符串传递给游标,连接工作正常。我是否需要对字符串变量执行任何特定操作才能使用它 randomstring = ShowConnString(self.cframe).connstringtex

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

pyodbc.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')
编辑:打印(随机字符串)输出:


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

首先要注意的是,您的第二个(注释掉的)示例不是使用“显式[connection]字符串”连接的,而是使用一系列关键字参数(“kwargs”)要指定
驱动程序
服务器
等,请注意关键字参数表单之间的细微差别

self.conn=pypyodbc.connect(驱动程序='{SQL Server}',服务器='(本地)',数据库='Audit',uid='sa',pwd='password')
…和连接字符串形式:

self.conn=pypyodbc.connect('driver={sqlserver};Server=(local);database=Audit;uid=sa;pwd=password')
现在如果
randomstring
变量确实包含

pypyodbc.connect(驱动程序={SQL Server}',服务器='(本地)',数据库='Audit',uid='sa',pwd='password')
那么它肯定不是有效的ODBC连接字符串,即使它只是包含

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

这仍然不是有效的连接字符串,因为项目之间用逗号(不是分号)分隔值周围有引号。在将值传递给
.connect
方法之前,您需要将
随机字符串的内容转换为适当的ODBC连接字符串。

首先要注意的是,您的第二个(注释掉的)示例没有与“显式[连接]字符串”连接,它使用一系列关键字参数(“KWARG”)来指定
驱动程序
服务器
,等等。请注意关键字参数表单之间的细微差别

self.conn=pypyodbc.connect(驱动程序='{SQL Server}',服务器='(本地)',数据库='Audit',uid='sa',pwd='password')
…和连接字符串形式:

self.conn=pypyodbc.connect('driver={sqlserver};Server=(local);database=Audit;uid=sa;pwd=password')
现在如果
randomstring
变量确实包含

pypyodbc.connect(驱动程序={SQL Server}',服务器='(本地)',数据库='Audit',uid='sa',pwd='password')
那么它肯定不是有效的ODBC连接字符串,即使它只是包含

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

这仍然不是有效的连接字符串,因为项目之间用逗号(不是分号)分隔值周围有引号。您需要将
randomstring
值的内容转换为适当的ODBC连接字符串,然后再将其传递给
.connect
方法。

请您的问题准确显示
打印(randomstring)时控制台中显示的内容
。请将您的问题精确显示在打印(随机字符串)
时控制台中显示的内容。随机字符串现在正在输出驱动程序={SQL Server};服务器=(本地);数据库=审计;uid=sa;pwd=密码,但我仍然在self.conn-pypyodbc.connect(随机字符串)中遇到相同的错误但是通过下面的显式调用,它可以工作:self.conn=pyodbc.connect('driver={sqlserver};Server=(local);database=GermanAudit;uid=sa;pwd=\u PWD4sa\u'))实际上,我不明白,我认为文本框的值返回时前面有一个换行符,当我将它打印到控制台时,它从控制台屏幕的顶部向下一行RandomString现在输出驱动程序={SQL Server};服务器=(本地);database=Audit;uid=sa;pwd=password,但self.conn-pypyodbc.connect(randomstring)仍会出现相同的错误,但通过以下显式调用它会起作用:self.conn=pypypyodbc.connect('driver={SQL Server};Server=(local);database=GermanAudit;uid=sa;pwd=\u PWD4sa"我不明白,实际上,我认为文本框的值返回时前面有一个换行符,当我将它打印到控制台时,它是从控制台屏幕顶部向下一行