繁体   English   中英

在Python中将SQL与IBM_DB连接器一起使用

[英]Using SQL with IBM_DB connector in Python

是否有人将ibm_db软件包与IBM的Python for PASE一起使用来更新IBM i(以前为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'变量的方法更简单一些:

sql = "select * from TEMPLIB.TEMPPF"

因此,我在某处无法正确制作INSERT格式。 有人知道格式吗? 我尝试了几种Internet上可用的格式,但是它们与Python不兼容,或者它们不是很好的例子。

首先,使用模运算符对字符串进行的连接不正确,因为%(vars)需要驻留在要格式化的字符串之外。

其次,您应该使用SQL参数化( 任何数据库中的行业标准,而不仅仅是DB2),而不是数据和查询语句的字符串插值。 您可以使用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()

暂无
暂无

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

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