我正在尝试以cvs格式从日志文件中获取数据,打开日志文件并逐行插入mysql。我收到这样的错误:
ERROR Traceback(最近一次调用最后一次):文件“/Users/alex/PycharmProjects/PA_REPORTING/padb_populate.py”,第26行,在VALUES中(%s,%s,%s,%s,%s,% S,%S%S%S%S%S%S%S%S%S%S%S%S%S%S%S%S %s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)',行)文件“/用户/alex/anaconda/lib/python2.7/site-packages/MySQLdb/cursors.py“,第187行,执行查询=查询%tuple([db.literal(item)for item in args])TypeError:not all在字符串格式化过程中转换的参数。
import csv
import MySQLdb
mydb = MySQLdb.connect(host='192.168.56.103',
user='user',
passwd='pass',
db='palogdb')
cursor = mydb.cursor()
csv_data = csv.reader(file('/tmp/PALOG_DEMODATA-100.csv'))
for row in csv_data:
cursor.execute('INSERT INTO palogdb(RECEIVE_TIME,SERIAL,TYPE,SUBTYPE,COL1,TIME_GENERATED,SRC,DST,NATSRC,NATDST,RULE,\
SRCUSR,DSTUSR,APP,VSYS1,FROM,TO,INBOUND_IF,OUTBOUND_IF,LOGSET,COL2,SESSIONID,COL3,REPEATCNT,SOURCEPORT,NATSPORT,NATDPORT, \
FLAGS,PROTO,ACTION,BYTES,BYTES_SENT,BYTES_RECEIVED,PACKETS,START,ELAPSED,CATEGORY,COL4,SEQNO,ACTIONFLAGS,SRCLOC,DSTLOC,NONE, \
PKTS_SENT,PKTS_RECEIVED,SESSION_END_REASON) \
VALUES (%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s,%s)', row)
#close the connection to the database.
mydb.commit()
cursor.close()
答案 0 :(得分:0)
您row
所有%s
的{{1}}中是否有足够数据?也许您的row
被解释为一个值,因此只展开了第一个%s
?尝试*row
将向量展开为值。
要进行调试,您可以尝试通过其他方法构建传递给execute
的字符串,例如
sql_string = 'INSERT ... VALUES ({}, {}, {})'.format(*row)
并打印出来。如果出现这样的错误,可以检查生成的字符串是否合理......