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

How to send in python params (which is string) into SQL question on DB2

我想编写接收参数作为字符串的函数,应该在 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

我正在寻找我的问题的任何解决方案。我找不到任何带有字符串和获取行的例子:(

谁能帮帮我?提前致谢。

嗯,Db2 Python API documentation has an example。问题是您正在混合不同的功能。你要么

  • execute_immediate:传入一个字符串作为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())