pyodbc无法在RedHat 5.4上工作。尝试使用unixODBC和FreeTDS连接到ms-sql数据库服务器?
我在使用pyobdc访问ms-sql数据库时遇到问题。pyodbc无法在RedHat 5.4上工作。尝试使用unixODBC和FreeTDS连接到ms-sql数据库服务器?
下面是系统配置: Python的2.7.11 Pyodbc 3.0.7 的RedHat 5.4(Tikanga)32位系统 的Microsoft SQL Server 2012(数据库服务器) 的unixODBC 2.3.0
$ tsql -C
输出:
Compile-time settings (established with the "configure" script)
Version: freetds v0.91
freetds.conf directory: /etc
MS db-lib source compatibility: yes
Sybase binary compatibility: no
Thread safety: yes
iconv library: yes
TDS version: 5.0
iODBC: no
unixodbc: yes
SSPI "trusted" logins: no
Kerberos: no
$ odbcinst -j
出放:
unixODBC 2.3.0
DRIVERS............: /usr/local/etc/odbcinst.ini
SYSTEM DATA SOURCES: /usr/local/etc/odbc.ini
FILE DATA SOURCES..: /usr/local/etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 4
SQLLEN Size........: 4
SQLSETPOSIROW Size.: 2
$ cat /usr/local/etc/odbcinst.ini
输出:
[ms-sql]
Description=TDS connection
Driver=/usr/local/lib/libtdsodbc.so
Setup=/usr/local/lib/libtdsodbc.so
FileUsage=1
UsageCount=1
$ cat /usr/local/etc/odbc.ini
输出:
[sqlserverdatasource]
Driver = ms-sql
Description = ODBC connection via ms-sql
Trace = No
Server = >IP Addresss To Database server<
Port = >Port Number<
Database = >Database name<
$ cat /etc/freetds.conf
输出:
[sql-server]
host = >IP Addresss To Database server<
port = >Port Number<
tds version = 8.0
命令这是给我的错误:
connection = pyodbc.connect(r'DRIVER={FreeTDS};SERVER=>IP Addresss To Database server<; PORT=>Port Number<;DATABASE=Database name;UID=Database UID;PWD=DatabasePasswd;')
错误:
Traceback (most recent call last): File "<stdin>", line 1, in
<module> pyodbc.Error: ('IM002', '[IM002] [unixODBC][Driver
Manager]Data source name not found, and no default driver specified
(0) (SQLDriverConnect)')
我试图解决这个问题的最后3天。但没有运气。所以任何帮助/建议都会非常有帮助。 我已经通过Google搜索了。 感谢提前:)
尝试是这样的:
freetds.conf:
[sql-server]
host = sql-server.host.com
port = 1433
tds version = 7.2
ODBC.INI:
[sql-server]
Driver = FreeTDS
Server = sql-server.host.com
Port = 1433
TDS_Version = 7.2
ODBCINST.INI:
[FreeTDS]
Description = v0.91 with protocol v7.2
Driver = /usr/local/lib/libtdsodbc.so
在Python:
connection = pyodbc.connect(r'DRIVER={FreeTDS};SERVER=sql-server.host.com;PORT=1433;DATABASE=Database name;UID=Database Username;PWD=DatabasePasswd;TDS_Version=7.2')
TDS版本8.0不存在。 7.2是FreeTDS 0.91的最高支持。看到这里解释的混乱:如果您仍然有问题,http://www.freetds.org/userguide/choosingtdsprotocol.htm
,尝试用tsql
和isql
测试,分别测试连接堆栈的freetds的unixODBC的和层。祝你好运!
非常感谢你:)因为你的帮助,我又挽救了几天。以上答案与** TDS_Version = 8.0 **一起工作。 –
太棒了!您可以用复选框将答案标记为正确吗?此外,如果您检查链接,则不会希望使用8.0。尽管它现在可以工作,但它不会在未来的FreeTDS版本中使用。如果你想要将来证明,你会想使用7.2。 :) – FlipperPA
Python中的DRIVER与'odbcinst.ini'中的DRIVER不匹配,并且您没有在连接字符串中指定TDS版本。解决方案如下。 – FlipperPA
@FlipperPA:谢谢你的回答。对于Driver中的错别字,我们深表歉意。我修改了大部分内容,忘记修改DRIVER = ms-sql。 –