我正在使用Python访问DB2 10.1.0中的表
我有一个名为foobar的登录帐户和一个具有相同名称的模式.我在架构下有一个名为users的表.
当我以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 Driver][DB2/LINUXX8664] SQL0204N “FOOBAR.USERS” is an undefined name. SQLSTATE=42704n (-204) (SQLExecDirectW)’)
这通常意味着未定义架构.但是,如果我将脚本中的查询更改为:
VALUES CURRENT SCHEMA
脚本成功运行并返回
FOOBAR
我还尝试将架构直接添加到表名,进行查询
SELECT * FROM FOOBAR.USERS
我仍然得到同样的错误.
有谁知道如何解决这个问题,以便查询用户表?非常感谢您的帮助和见解.
解决方法:
也许大小写有问题.我使用以下语句创建了一个表:
CREATE TABLE“FOOBAR”.“用户”(col1 INTEGER)
如果我尝试在CLP上运行以下语句,我会收到错误SQL -204
db2“select * from db2root1.Users”
db2“select * from db2root1.USERS”
db2“select * from db2root1.users”
始终错误消息SQL0204N“DB2ROOT1.USERS”是未定义的名称.返回SQLSTATE = 42704.
我建议运行以下语句并检查表名的拼写.
从syscat.tables中选择t.tabname,其中lower(t.tabname)就像’user%’
有些工具使用区分大小写的表名创建表.在某些情况下,这可能会导致SQL -204.
在这种情况下,删除并重新创建没有任何引号的表.
【说明】:本文章由站长整理发布,文章内容不代表本站观点,如文中有侵权行为,请与本站客服联系(QQ:254677821)!