2013-02-09 45 views
2

Python版本2.6 pyodbc版本3.0.6损坏的结果集使用pyodbc

Python代码!例如: #在/ usr/bin中/ python26

import pyodbc 
import os 
import sys 

SQL = sys.argv[1]; 

conn = pyodbc.connect('DSN=VerticaDSN') 
cursor = conn.cursor() 

cursor.execute(SQL) 
rows = cursor.fetchall() 
for row in rows: 
    print row[0] 

而不是打印数据是在表中,蟒输出损坏的数据,仅数据的一部分,象

ps 
t Foods 
smart 
ly Dollar 
enney 
ean 
rd 

预期结果集:

Ames 
Ukrops 
Giant Foods 
Cardsmart 
Aco 
Family Dollar 
JC Penney 
Eckerd 

为什么Resultset被损坏? 有什么建议吗?

+0

数据源(SQL Server,Oracle,MySQL等)的DBMS和使用哪个驱动程序? – Bryan 2013-02-11 13:41:11

+0

Vertica。 驱动libverticaodbc.so – Toyway 2013-02-11 18:38:59

回答

1

该问题可能不在pyodbc中,而是在ODBC驱动程序本身中。下面是几件事情尝试:

  • 尝试投列到另一种数据类型(不知道你用的是什么数据库,但它有可能列是unicode的,司机只能理解ASCII,或周围的其他方式;我倾向于认为这是问题)
  • 为你的数据库使用专门的Python客户端(如果可用),而不是ODBC(如cx_Oraclepsycopg2
  • 看看ODBC驱动程序的配置参数
  • 安装的ODBC驱动程序不同的供应商
+0

演员没有帮助。到目前为止,我只发现一个客户端pyvertica与Vertica一起工作。但它不适合我。 – Toyway 2013-02-11 20:20:18

+0

为什么它不适合你? 'pyvertica'声称是'psycopg2'克隆。您可以尝试使用原始的'psycopg2'(它可以帮助我从Windows和Solaris客户端连接到Greenplum数据库); BTW:当我试图通过ODBC从Netezza数据库中读取特殊的'name'数据类型时,类型转换技巧适用于我,这就是为什么我建议尝试它。 – 2013-02-12 03:28:32

+0

好的,谢谢。将尝试psycopg2。但为了连接它使用pyodbc,不是吗?如果是这样,问题依然存在 – Toyway 2013-02-12 22:46:57