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