使用 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 时出错的主要内容,如果未能解决你的问题,请参考以下文章