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
,我仍然得到同樣的錯誤。
這說明了什麼命令行中運行時:'「選擇tabschema,TABNAME從SYSCAT.TABLES其中大寫( tabname)='USERS'「'?如果你不**在'accessString'中使用'CURRENTSCHEMA'屬性會發生什麼? – mustaccio
@mustaccio感謝您的迴應。當我運行查詢時,我得到FOOBAR和USERS。當我刪除CURRENTSCHEMA時,我仍然有OP中列出的相同結果。 – Jesuisme
我可以提供的唯一的其他解釋是您連接到兩個不同的數據庫。 – mustaccio