2014-05-23 26 views
1

我用pyodbc訪問DB2 10.1.0DB2查詢錯誤SQL0204N即使在架構中定義

我有一個名爲foobar的登錄帳戶,並具有相同名稱的模式。我有一個名爲模式下的用戶的表。

當我登錄的foobar的,我可以在命令行中成功運行以下查詢:

select * from users 

我有我使用連接到數據庫中的一個小的Python腳本。該腳本是:

#!/usr/bin/python 

import pyodbc 

if __name__ == "__main__": 

    accessString ="DRIVER={DB2};DATABASE=MYDATABASE;SERVER=localhost;UID=foobar; PWD=foobarish1;CURRENTSCHEMA=FOOBAR" 
    print accessString 
    cnxn = pyodbc.connect(accessString , autocommit=True) 
    cursor = cnxn.cursor() 
    query = "SELECT * FROM USERS" 
    cursor.execute(query) 
    rows = cursor.fetchall() 
    for row in rows: 
     print 'Row data' 
     print row[0] 
    cursor.close() 
    cnxn.close() 

當我運行該腳本,我得到以下錯誤:

( '42S02',「[42S02] [IBM] [CLI驅動程序] [DB2/LINUXX8664] SQL0204N「 SQLSTATE = 42704 \ n(-204)(SQLExecDirectW)')

這通常意味着模式沒有被定義。不過,如果我更改查詢的腳本:

VALUES CURRENT SCHEMA 

腳本運行成功並返回

FOOBAR 

有誰知道如何解決這個問題,所以我可以查詢用戶表?感謝您的幫助和洞察力。

編輯:我也試着直接添加模式,以表名,使得查詢

SELECT * FROM FOOBAR.USERS 

,我仍然得到同樣的錯誤。

+0

這說明了什麼命令行中運行時:'「選擇tabschema,TABNAME從SYSCAT.TABLES其中大寫( tabname)='USERS'「'?如果你不**在'accessString'中使用'CURRENTSCHEMA'屬性會發生什麼? – mustaccio

+0

@mustaccio感謝您的迴應。當我運行查詢時,我得到FOOBAR和USERS。當我刪除CURRENTSCHEMA時,我仍然有OP中列出的相同結果。 – Jesuisme

+0

我可以提供的唯一的其他解釋是您連接到兩個不同的數據庫。 – mustaccio

回答

0

我有同樣的問題,並通過查詢設置的模式明確的解決了這個問題:

SET CURRENT SCHEMA foobar