1

\在尝试通过 Linux 工作站上的 pyodbc 连接到 MS SQL 数据库(我已通过 tsql 和 isql 成功连接到该数据库)时,我一直在与转义字符作斗争,并决定将其发布在这里,希望有人能帮助我!

我的 SQL 服务器 UID 包括域和我的用户名,格式为 domain\username。我尝试使用\\and转义反斜杠r'...'(加上下面列出的方法和许多其他我没有费心记录的荒谬尝试),并且都完全转义字符串以提供空白条目。

尝试和错误的详细信息如下。如果有人知道我的语法有什么问题,或者这表明存在更大的问题,我将非常感谢您的洞察力!

尝试的连接字符串:

cnxn_str = 'DSN=sqlserverdatasource;TDS_Vers=8.0;Port=1433;UID=domain\\username'
cnxn_str = r'DSN=sqlserverdatasource;TDS_Vers=8.0;Port=1433;UID=domain\username'
cnxn_str = 'DSN=sqlserverdatasource;TDS_Vers=8.0;Port=1433;UID=domain\\\\username'
cnxn_str = ''.join(['DSN=sqlserverdatasource;TDS_Vers=8.0;Port=1433;UID=domain','\\','username'])
cnxn_str = 'DSN=sqlserverdatasource;TDS_Vers=8.0;Port=1433;UID=domain/username'

尝试连接并产生错误:

cnxn = pyodbc.connect(cnxn_str)
Connection string configurations that fail with
pyodbc.ProgrammingError: ('42000', "[42000] [unixODBC][FreeTDS][SQL Server]Login failed for user ''. The user is not associated with a trusted SQL Server connection. (18452) (SQLDriverConnect)") :
4

2 回答 2

1

由于您似乎正在尝试使用集成身份验证,因此请查看Microsoft ODBC Driver for SQL Server on Linux

否则,取消 DSN 并提供密码:

cnxn_str = "DRIVER={FreeTDS};SERVER=DNS;PORT=1433;TDS_Version=8.0;UID=domain\\username;PWD=password"
于 2013-10-21T18:10:20.917 回答
0

TryoLabs 的教程在 Ubuntu 下从 Python 连接到 MS SQL Server 数据库提供了下面包含的语法,该语法用于可靠地从 Python 应用程序建立 MS SQL 连接。

dsn = 'sqlserverdatasource'
user = '<domainname>\\<username>'
password = '<password>'
database = '<dbname>'

cnxn_str = 'DSN=%s;UID=%s;PWD=%s;DATABASE=%s;' % (dsn,user,password,database)
conn = pyodbc.connect(cnxn_str)
cursor = conn.cursor()
于 2014-07-25T18:26:10.750 回答