【问题标题】:Error loading log file data into mysql using cvs format and python使用 csv 格式和 python 将日志文件数据加载到 mysql 时出错
【发布时间】:2016-04-12 03:28:49
【问题描述】:

我正在尝试从 cvs 格式的日志文件中获取数据,打开日志文件并将逐行插入 mysql。我收到这样的错误:

错误回溯(最近一次调用最后一次):文件“/Users/alex/PycharmProjects/PA_REPORTING/padb_populate.py”,第 26 行,值(%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)', 行) 文件 "/Users /alex/anaconda/lib/python2.7/site-packages/MySQLdb/cursors.py",第 187 行,在执行查询 = 查询 % tuple([db.literal(item) for item in args]) 类型错误:不是全部在字符串格式化期间转换的参数。

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()

【问题讨论】:

    标签: python csv mysql-python


    【解决方案1】:

    是否有可能,您在 row 中没有足够的数据来存储您所有的 %s 数据?也许您的 row 被解释为一个值,因此只有第一个 %s 被扩展?尝试*row 将向量扩展为值。

    要调试,您可以尝试通过其他方法构建传递给execute 的字符串,例如

    sql_string = 'INSERT ... VALUES ({}, {}, {})'.format(*row)
    

    并打印出来。如果你得到这样的错误,你可以检查一下,生成的字符串看起来是否合理......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-06-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-07
      • 1970-01-01
      • 2015-11-12
      相关资源
      最近更新 更多