私はPythonを初めて使用し、DB2データベースに書き込んで試してみようと思いました。Pythonは2.7で、iSeriesで実行されています。やることリストにあるさまざまなことについて、RPGやCLの代わりにPythonのアイデアが好きなので、最初の原則から始めています...しかし、問題が発生しました-Pythonがどのように理解されていないようです文字列を処理します。次に例を示します。
理由を説明してください:
db2cursor.execute('insert into trickledb.trickledb values(?, ?, ?, ?, ?, ?, ?, ?)',
('01100158059642','1055','2012-09-12','13:30:05','0700','1','1','28010'))
まったく問題ありませんが(値はデータベースに挿入されます)、次のようになります。
sql="'insert into trickledb.trickledb values(?, ?, ?, ?, ?, ?, ?, ?)',
('01100158059642','1055','2012-09-12','13:30:05','0700','1','1','28010')"
db2cursor.execute(sql)
エラーが発生します:
db2cursor.execute(sql)
db2.Error: SQLState: 42601, Error code: -104
Token 'insert into trickledb.trickle was not valid.
Valid tokens: ( END GET SET CALL DROP FREE HOLD.
脳が痛い!
これが私の完全なスクリプトです-私はXMLファイルからデータを引き出しています:
#!/usr/bin/env python
# (Be in -*- python -*- mode.)
import db2
from xml.dom import minidom
db2connection = db2.connect()
db2cursor = db2connection.cursor()
xmldoc = minidom.parse('test.XML')
itemlist = xmldoc.getElementsByTagName('PluSale')
for s in itemlist :
print s.attributes['PluCode'].value, s.attributes['TicketNumber'].value, s.attributes['Time'].value, s.attributes['Date'].value, s.attributes['StoreNumber'].value, s.attributes['PosNo'].value, s.attributes['Qty'].value, s.attributes['SequenceNbr'].value
PluCode = s.attributes['PluCode'].value
TicketNumber = s.attributes['TicketNumber'].value
Time = s.attributes['Time'].value
Date = s.attributes['Date'].value
StoreNumber = s.attributes['StoreNumber'].value
PosNo = s.attributes['PosNo'].value
Qty = s.attributes['Qty'].value
SequenceNbr = s.attributes['SequenceNbr'].value
string = "%s,%s,%s,%s,%s,%s,%s,%s" %(PluCode,TicketNumber,Date,Time,StoreNumber,PosNo,Qty,SequenceNbr)
list = [PluCode,TicketNumber,Date,Time,StoreNumber,PosNo,Qty,SequenceNbr]
tuple = (PluCode,TicketNumber,Date,Time,StoreNumber,PosNo,Qty,SequenceNbr)
print string
print list
print tuple
db2cursor.execute ('insert into trickledb.trickledb values(?, ?, ?, ?, ?, ?, ?, ?)', tuple)
db2connection.commit()
db2cursor.close()
db2connection.close()
.executeステートメントのパラメータービットで、タプルを文字列とリストに置き換えています。私はそれが私が完全に理解していない本当に単純なものだと確信しています。これは、iSeriesでPythonのアイデアが大好きなので、本当に克服したい障害です... RPGやCLと比較すると、非常に強力です...。