我无法让pyodbc
工作。我在Linux Mint 14上安装了unixodbc
,unixodbc-dev
,odbc-postgresql
,pyodbc
个软件包。
我正在失去希望自己找到解决方案,任何帮助表示赞赏。请参阅以下详细信息:
运行:
>>> import pyodbc
>>> conn = pyodbc.connect("DRIVER={PostgreSQL};SERVER=localhost;DATABASE=test;USER=openerp;OPTION=3;")
给我:
>>> pyodbc.Error: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)')
#odbcinst -j给出:
unixODBC 2.2.14
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /home/atman/.odbc.ini
SQLULEN Size.......: 4
SQLLEN Size........: 4
SQLSETPOSIROW Size.: 2
这让我觉得有一个unixodbc
配置问题。
以下是我的unixodbc
配置文件内容:
档案 /etc/odbcinst.ini
:
[PostgreSQL ANSI]
Description = PostgreSQL ODBC driver (ANSI version)
Driver = psqlodbca.so
Setup = libodbcpsqlS.so
Debug = 0
CommLog = 1
UsageCount = 2
[PostgreSQL Unicode]
Description = PostgreSQL ODBC driver (Unicode version)
Driver = psqlodbcw.so
Setup = libodbcpsqlS.so
Debug = 0
CommLog = 1
UsageCount = 2
档案 /etc/odbc.ini
:
[PostgreSQL test]
Description = PostgreSQL
Driver = PostgreSQL ANSI
Trace = No
TraceFile = /tmp/psqlodbc.log
Database = template1
Servername = localhost
UserName =
Password =
Port =
ReadOnly = Yes
RowVersioning = No
ShowSystemTables = No
ShowOidColumn = No
FakeOidIndex = No
ConnSettings =
档案 ~/.odbc.ini
:
[DEFAULT]
Driver = PostgreSQL
[PostgreSQL]
Description = Test to Postgres
Driver = PostgreSQL
Trace = Yes
TraceFile = sql.log
Database = nick
Servername = localhost
UserName =
Password =
Port = 5432
Protocol = 6.4
ReadOnly = No
RowVersioning = No
ShowSystemTables = No
ShowOidColumn = No
FakeOidIndex = No
ConnSettings =
答案 0 :(得分:24)
我相信你的问题的答案是在你的〜/ .odbc.ini文件中你要使用驱动程序PostgreSQL
- 但是你没有在/etc/odbcinst.ini文件中定义该驱动程序。尝试将PostgreSQL
更改为PostgreSQL ANSI
或PostgreSQL Unicode
(两者都在/etc/odbcinst.ini中定义)。
答案 1 :(得分:13)
对我来说,问题是我的odbc.ini和odbcinst.ini文件的实际位置。
在许多系统上,这些文件的安装位置位于/ etc /
中但是,就我而言,这些文件位于/ usr / local / etc /
下可以通过输入
来确定
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..: /usr/local/etc/odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
我的odbc.ini文件已存在于/ etc中,因此解决方案是将它们从/ etc /复制到/ usr / local / etc /
cp /etc/odbc.ini /etc/odbcinst.ini /usr/local/etc/
编辑:还值得注意的是odbcinst -j命令输出的路径可以根据使用sudo
而改变。
答案 2 :(得分:4)
对我而言,一切都归结为一个空白角色。
$cat /home/ec2-user/.odbc.ini
[DSNNAME]
Driver =FreeTDS
Description=description
Server =serverpath
Port =1433
Database =dbname
给我“找不到数据源名称,并且没有指定默认驱动程序”错误。
删除'='字符前的所有空格。
在次要说明中,使用osql进行DSN连接测试可以为您提供更详细的错误描述。它在这个过程中给了我很多帮助。
$ osql -S DSNNAME -U username -P password
checking shared odbc libraries linked to isql for default directories...
trying /txM ... no
trying /tmp/sql ... no
trying /tmp/sql ... no
trying /w}H ... no
trying /usr/loc ... no
trying /tmp/sql.log ... no
trying /home ... no
trying /.odbc.ini ... no
trying /usr/local/etc ... OK
checking odbc.ini files
reading /home/ec2-user/.odbc.ini
[DSNNAME] found in /home/ec2-user/.odbc.ini
found this section:
[DSNNAME]
Driver =FreeTDS
Description=description
Server =serverpath
Port =1433
Database =dbname
looking for driver for DSN [DSNNAME] in /home/ec2-user/.odbc.ini
no driver mentioned for [DSNNAME] in .odbc.ini
looking for driver for DSN [default] in /home/ec2-user/.odbc.ini
osql: error: no driver found for [DSNNAME] in .odbc.ini
将错误消息与我的ini文件进行比较,使得对问题的分类变得更加容易。
答案 3 :(得分:1)
对于其他对此相同的一般性错误进行疑难解答,请确保您没有在odbc.ini文件的顶部意外添加无关字符 - 这会导致其无效并且所有数据源声明都默默地忽略(错误没有说明具体问题)。
答案 4 :(得分:1)
我有同样的问题。事实证明,错过了数据源文件:/etc/ODBCDataSources
。只需触摸该文件即可。
答案 5 :(得分:0)
对我来说,我发现这个问题是由于混合了 32 位和 64 位二进制文件。关于修复,我只能说“祝你好运,尽量保持 32 位或 64 位”。 ?