在Python中对IBM_DB connector使用SQL

2024-10-01 17:22:20 发布

您现在位置:Python中文网/ 问答频道 /正文

有人在IBM的pythonforpase中使用ibm_db包来更新ibmi(以前的AS/400)上的Db2文件吗?在

我想使用Python脚本(来自QSH)来更新Db2数据库。我的目的是在运行时填充值并更新Db2文件的字段。它可以处理静态(硬编码)值,但不能处理动态值。在

以下是我正在尝试的方法,但它不起作用:

import ibm_db

c1 = ibm_db.connect('*LOCAL','userid','password') 
sql = """INSERT INTO TEMPLIB.TEMPPF (TYPE, DRPARTY, CRPARTY, 
                                     AMOUNT,ACNUM, DESCRIPT) 
          VALUES('%s', '%s', '%s', '%s', '%s', '%s'), 
          %(self.type, self.debitparty, self.creditparty, self.amount, 
            self.craccountnumber, self.description) with NC
      """

stmt = ibm_db.exec_immediate(c1, sql ) 
  • self.typeself.debitparty等是Python实例变量,有值。在
  • TYPEDRPARTYCRPARTY等是TEMPPF的字段。在

更简单的方法,如填充“sql”变量,如下所示:

^{pr2}$

所以在某些地方,我没有正确地制作插入格式。有人知道格式吗?我尝试了互联网上的几种格式,但它们与Python不兼容,或者它们不是很好的例子。在


Tags: 文件方法selfdbsql格式typeibm
1条回答
网友
1楼 · 发布于 2024-10-01 17:22:20

首先,使用模数运算符连接字符串是不正确的,因为%(vars)需要位于要格式化的字符串之外。在

其次,您应该使用SQL参数化(不是DB2而是any数据库中的行业标准),而不是数据和查询语句的字符串插值。您可以使用ibm_db_dbi模块来传递游标execute调用中的参数:

import ibm_db
import ibm_db_dbi   # ADD DBI LAYER

db = ibm_db.connect('*LOCAL','userid','password') 

# ADD FOR PYTHON STANDARD DB-API PROPERTIES (I.E., CURSOR)
conn = ibm_db_dbi.Connection(db)   
cur = conn.cursor()

# PREPARED STATEMENT (WITH PLACEHOLDERS)
sql = """INSERT INTO TEMPLIB.TEMPPF (TYPE, DRPARTY, CRPARTY, 
                                     AMOUNT, ACNUM, DESCRIPT) 
          VALUES(?, ?, ?, ?, ?, ?)
          with NC
      """

# EXECUTE ACTION QUERY BINDING PARAMS
cur.execute(sql, (self.type, self.debitparty, self.creditparty, self.amount, 
                  self.craccountnumber, self.description)) 

cur.close()
conn.close()

相关问题 更多 >

    热门问题