2013-02-09 60 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