我在Superset(来自Airbnb)的安装工作了两周,用于虚拟RHEL机器上的数据可视化以及与SQL Server数据库的连接。但由于我猜测驱动程序的问题,我仍然无法连接到此数据库。我尝试了很多东西,我想知道你是否有解决方案,关于我需要的驱动程序,关于配置的修改等... 有人告诉我有关jTDS驱动程序的信息。也许我需要这样的东西,但对于python。如果您有任何想法,这就是我已经做过的事情。
1)我试图从Superset连接到数据库:
SQL Alchemy URI:mssql://user:password@fr0-iacls-190.eu.company.corp:10001/dbname
ERROR : {"error": "Connection failed!\n\n
The error message returned was:\n(pyodbc.Error) ('IM002', '[IM002] [unixODBC][DriverManager]
Data source name not found, and no default driver specidied (0) (SQLDriverConnect)')"}
2)我尝试使用mssql + pymssql几乎一样:
SQL Alchemy URI:mssql+pymssql://user:password@fr0-iacls-190.eu.company.corp:10001/dbname
ERROR:{"error":"Connection failed!\n\n
The error message returned was:\n(pymssql.OperationalError) (18456, 'DB-Lib error message 20018,
severity 14:\\nGeneral SQL Server error: Check messages from the SQL Server\\n
DB-Lib error message 20002, severity 9:\\n Adaptive Server connection failed (fr0-iacls-190.eu.company.corp:10001)\\n')"}
3)我尝试从虚拟RHEL机器上的终端连接到数据库:
# tsql -S fr0-iacls-190.eu.company.corp -U user
Password:
locale is "en_US.UTF-8"
locale charset is "UTF-8"
using default charset "UTF-8"
20^C
这里我有一个定时器,每秒增加一个数字。我在20秒后停止了这个例子。
4)最后我尝试了一个像这样的python脚本:
import pyodbc
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=fr0-iacls-190.eu.company.corp;DATABASE=dbname;UID=;PWD=password')
空UID是另一个StackOverflow帖子中使用的提示。
# python connect.py
Traceback (most recent call last):
File "connect.py", line 2, in <module>
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER=fr0-iacls-190.eu.company.corp;DATABASE=dbname;UID=;PWD=password')
pyodbc.Error: ('01000', "[01000] [unixODBC][Driver Manager]Can't open lib 'SQL Server' : file not found (0) (SQLDriverConnect)")
要完成,我读了两个文件,odbc.ini和odbcinst.ini,但我不知道它们是否在好目录(/ etc)中。我不是在root(〜)上工作,而是在root的父目录中工作(cd~ /..)...
如有必要,以下是两个文件:
ODBC.INI
;
; odbc.ini
;
[ODBC Data Sources]
JDBC = Sybase JDBC Server
[JDBC]
Driver = /usr/local/lib/libtdsodbc.so
Description = Sybase JDBC Server
Trace = No
Servername = JDBC
Database = pubs2
UID = guest
[Default]
Driver = /usr/local/lib/libtdsodbc.so
ODBCINST.INI
[PostgreSQL]
Description=ODBC for PostgreSQL
Driver=/usr/lib/psqlodbcw.so
Setup=/usr/lib/libodbcpsqlS.so
Driver64=/usr/lib64/psqlodbcw.so
Setup64=/usr/lib64/libodbcpsqlS.so
FileUsage=1
[MySQL]
Description=ODBC for MySQL
Driver=/usr/lib/libmyodbc5.so
Setup=/usr/lib/libodbcmyS.so
Driver64=/usr/lib64/libmyodbc5.so
Setup64=/usr/lib64/libodbcmyS.so
FileUsage=1
[MSSQLTest]
Driver = ODBC Driver 13 for SQL Server
Server = [http:]fr0-iacls-190.eu.company.corp[,10001]
#
# Note:
# Port is not a valid keyword in the ~/.odbc.ini file
# for the Microsoft ODBC driver on Linux
#
[ODBC Driver 13 for SQL Server]
Description=Microsoft ODBC Driver 13 for SQL Server
Driver=/opt/microsoft/msodbcsql/lib64/libmsodbcsql-13.1.so.4.0
UsageCount=1
非常感谢您的时间和帮助。
答案 0 :(得分:0)
要尝试的一些事项:
更正python连接字符串:
你有/etc/odbcinst.ini
到[ODBC Driver 13 for SQL Server]
的别名MS SQL驱动程序,因此在你的python代码中你应该使用它,而不是SQL Server
:
import pyodbc
cnxn = pyodbc.connect('Driver={ODBC Driver 13 for SQL Server};Server=fr0-iacls-190.eu.company.corp;Port=10001;Database=dbname;UID=user;PWD=password')
使用正确的凭据替换user
和password
。
使用isql使用odbc.ini测试连接:
通常使用odbcinst.ini
设置驱动程序配置,然后使用odbc.ini
设置数据库实例(引用驱动程序),因此odbc.ini
的有效输入可能是:
[friendly_database_name]
Description=A description to help you remember what this connection is for
Server=fr0-iacls-190.eu.company.corp
Port=10001
Database=dbname
UID=user
PWD=password
如果您安装了isql
(如果没有安装unixODBC
包的一部分),那么您可以测试:
$ isql -3 -v friendly_database_name
确保没有防火墙阻止您:
我不确定为什么tsql命令失败了,它应该返回1>
提示符。确保您可以建立与数据库服务器的telnet连接:
$ telnet fr0-iacls-190.eu.company.corp 10001
应该给你类似的东西:
Trying 12.34.56.78...
Connected to fr0-iacls-190.eu.company.corp.
Escape character is '^]'
然后转到ctrl
+ ]
并输入quit
退出(或者ctrl
+ c
取消,如果telnet测试失败,则取消。)< / p>