使用 csv 格式和 python 将日志文件数据加载到 mysql 时出错

Posted

技术标签:

【中文标题】使用 csv 格式和 python 将日志文件数据加载到 mysql 时出错【英文标题】:Error loading log file data into mysql using cvs format and python 【发布时间】: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()

【问题讨论】:

【参考方案1】:

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

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

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

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

【讨论】:

以上是关于使用 csv 格式和 python 将日志文件数据加载到 mysql 时出错的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python 将 CSV 文件数据转换为 JSON 格式

python 读取日志文件

python回归预测数据怎么导出?

创建方便的csv格式文件

Python csv模块(读写文件)

怎么将Python的运行结果导出为csv格式?