如何将python参数(字符串)发送到DB2上的SQL问题中

pdtvr36n  于 2022-11-07  发布在  DB2
关注(0)|答案(1)|浏览(156)

我想写一个函数,它以字符串的形式接收参数,这个参数应该在DB2数据库的SQL语句中使用。然后我需要一行接一行,在每个循环步骤中执行smth:

import ibm_db
conn_str = 'database=xxx;hostname=x.x.x.x;port=xxxx;protocol=TCPIP;UID=xxxxx;pwd=secret;'
ibm_db_conn = ibm_db.connect(conn_str,'','')

def question_to_db(tel : string):
    sql = "SELECT * from mper where mper.tel = ?"
    sql2 = ibm_db.prepare(ibm_db_conn, sql)
    ibm_db.bind_param(sql2, 1, tel, ibm_db.SQL_PARAM_INPUT, ibm_db.SQLCHAR)
    stmt = ibm_db.exec_immediate(ibm_db_conn, sql2)
    row = ibm_db.fetch_both(stmt)
    while row != False
        do_smth_with_row ....
        row = ibm_db.fetch_both(stmt)
    return(True)

运行程序后,我收到错误:

stmt = ibm_db.exec_immediate(ibm_db_conn, sql2)
Exception: statement must be a string or unicode

我正在寻找我的问题的任何解决方案。我找不到任何带有字符串和取数行的示例:(
有谁能帮我吗?先谢谢了。

pbpqsu0x

pbpqsu0x1#

Db2 Python API文档中有一个例子。问题是您混合了不同的函数。

  • 立即执行:传入一个字符串,作为SQL语句执行一次。
  • 准备和执行:首先准备一个字符串作为要执行的SQL语句。准备好后,可以执行该语句一次或多次。

应该可以这样做:

sql_stmt = "SELECT * from mper where mper.tel = ?"
stmt = ibm_db.prepare(ibm_db_conn, sql_stmt)
ibm_db.bind_param(stmt, 1, tel)
try:
   ibm_db.execute(stmt)
except:
   print(ibm_db.stmt_errormsg())

相关问题