atm*_*man 41 postgresql unixodbc pyodbc python-2.7
我pyodbc
上班很困难.我有unixodbc
,unixodbc-dev
,odbc-postgresql
,pyodbc
在我的Linux Mint的14.我失去希望找到自己的解决方案安装的软件包,任何帮助表示赞赏.详情如下:
运行:
>>> import pyodbc
>>> conn = pyodbc.connect("DRIVER={PostgreSQL};SERVER=localhost;DATABASE=test;USER=openerp;OPTION=3;")
Run Code Online (Sandbox Code Playgroud)
给我:
>>> pyodbc.Error: ('IM002', '[IM002] [unixODBC][Driver Manager]Data source name not found, and no default driver specified (0) (SQLDriverConnect)')
Run Code Online (Sandbox Code Playgroud)
#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
Run Code Online (Sandbox Code Playgroud)
这让我觉得存在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
Run Code Online (Sandbox Code Playgroud)
档案 /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 =
Run Code Online (Sandbox Code Playgroud)
档案 ~/.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 =
Run Code Online (Sandbox Code Playgroud)
Ben*_*ill 24
我相信你的问题的答案是在你的〜/ .odbc.ini文件中你说要使用驱动程序PostgreSQL
- 但你没有在/etc/odbcinst.ini文件中定义该驱动程序.尝试更改PostgreSQL
为PostgreSQL ANSI
或PostgreSQL Unicode
(两者都在/etc/odbcinst.ini中定义).
tan*_*ndy 16
对我来说,问题是我的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
Run Code Online (Sandbox Code Playgroud)
我的odbc.ini文件已存在于/ etc中,因此解决方案是将它们从/ etc /复制到/ usr/local/etc /
cp /etc/odbc.ini /etc/odbcinst.ini /usr/local/etc/
编辑:还值得注意的是,odbcinst -j命令输出的路径可以根据使用sudo
与否而改变.
对我来说,这全都归结为一个空格字符。
$cat /home/ec2-user/.odbc.ini
[DSNNAME]
Driver =FreeTDS
Description=description
Server =serverpath
Port =1433
Database =dbname
Run Code Online (Sandbox Code Playgroud)
给我“找不到数据源名称,并且未指定默认驱动程序”错误。
删除'='字符之前的所有空格使其起作用。
辅助说明一下,使用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
Run Code Online (Sandbox Code Playgroud)
将错误消息与我的ini文件进行比较,使对该问题进行分类变得容易得多。
归档时间: |
|
查看次数: |
79460 次 |
最近记录: |