我试图通过Linux工作站上的pyodbc连接到MS SQL数据库(我已成功通过tsql和isql连接)时,我一直在与\
转义字符作斗争,并决定在此发布希望有人可以帮助我!
我的SQL服务器的UID包括domain \ username形式的域名和用户名。我已经尝试使用\\
和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)") :
答案 0 :(得分:0)
由于您似乎正在尝试使用集成身份验证,请查看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"
答案 1 :(得分:0)
TryoLabs的教程Connecting to an MS SQL Server database from Python under Ubuntu提供了下面的语法,该语法用于从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()