繁体   English   中英

在 Python 中遍历 FOR CURSOR

[英]Iterate through FOR CURSOR in Python

我刚开始用 Python 编码,但遇到了一个问题。 我正在使用 ibm_dbi 驱动程序。

这是我的 sql 示例:

    FOR v AS cur CURSOR FOR
       SELECT S.NAME FROM SYSIBM.SYSTABLES AS S
       JOIN (SELECT DISTINCT TBNAME FROM SYSIBM.SYSCOLUMNS WHERE CREATOR = 'SOME_SCHEMA_DB') AS C.TBNAME = S.NAME WHERE S.CREATOR = 'SOME_SCHEMA' AND S.TYPE = 'T'
       DO
         SET TABLE = SCHEMA1 ||'.'||v.Name
         ...
         SELECT 1 INTO TEMP_TABLE FROM SYSIBM.SYSTABLES WHERE TYPE='T' AND CREATOR = SCHEMA1 AND NAME = v.NAME
    END FOR;

到目前为止,我在 Python 中有:

#make a connection to db
conn = ibm_db_dbi.connect("DATABASE=%s;HOSTNAME=%s,....)
#define a cursor
cur = conn.cursor()
sql="""SELECT S.NAME FROM SYSIBM.SYSTABLES AS S
           JOIN (SELECT DISTINCT TBNAME FROM SYSIBM.SYSCOLUMNS WHERE CREATOR = 'SOME_SCHEMA_DB') AS C.TBNAME = S.NAME WHERE S.CREATOR = 'SOME_SCHEMA' AND S.TYPE = 'T'"""

resultSet = cur.execute(sql)

我不知道如何遍历查询结果并从游标设置值。 如何为这段代码设置值

SET TABLE = SCHEMA1 ||'.'||v.Name
             ...
SELECT 1 INTO TEMP_TABLE FROM SYSIBM.SYSTABLES WHERE TYPE='T' AND CREATOR = SCHEMA1 AND NAME = v.NAME

提示:首先让你的 SQL 在 python 之外工作。 您的问题表明该查询存在语法错误或拼写错误。

要遍历查询的结果集,请使用 DBI 接口的记录获取方法之一(例如, fetchmany()fetchall()或其他)。

这是一个使用 fetchmany() 的片段。

try:
   cur = conn.cursor()
   sql="""SELECT S.NAME FROM SYSIBM.SYSTABLES AS S
          inner JOIN (SELECT DISTINCT TBNAME 
                      FROM SYSIBM.SYSCOLUMNS 
                      WHERE TBCREATOR = 'SOME_SCHEMA') AS C
          ON C.TBNAME = S.NAME 
          WHERE S.CREATOR = 'SOME_SCHEMA' 
          AND S.TYPE = 'T';"""
   cur.execute(sql)
   result = cur.fetchmany()
   while result:
       for i in result:
           print(i)
       result = cur.fetchmany()


except Exception as e:
    print(e)
    raise

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM