[英]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.type
, self.debitparty
等是Python实例变量,并且具有值。 TYPE
, DRPARTY
, CRPARTY
等是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.