如何使用Python将空格分隔的文本文件插入mysql?

时间:2013-05-11 05:41:45

标签: python mysql parsing

我的文字文件如下所示:

10May2013   3.1   http://ncbi.org p.sojae_aafeatureimp    p.sojae_aafeatureimp

10May2013   3.2   http://ncbi.org   p.sojae_aasequenceimp   p.sojae_aasequenceimp

10May2013   3.3   http://ncbi.org   p.sojae_blatalignment   p.sojae_blatalignment

如何解析这些单独的行并将其插入我的数据库?

数据库结构:(日期,版本,网址,名称,说明)

我必须使用Python将文本文件中的值插入到mysql中。到目前为止,我的脚本就像:

import MySQLdb, csv, sys
with open('externaldatabase.txt') as textfile:
  csvreader = csv.reader(textfile)
  csvdata = []
  for row in csvreader:
  csvdata.append(row)

conn = MySQLdb.connect (host = "localhost",user = "username", passwd = "password",db = "database_name")
c = conn.cursor()

for row in csvdata:
# Insert a row of data

c.execute("INSERT INTO externaldatabase (release_date, version, download_url, name, description) VALUES ('%s', '%s', '%s', '%s', '%s')" % (row))

conn.commit()
c.close()

但它让我犯了错误:

Traceback (most recent call last):

File "csv1.py", line 16, in <module>

c.execute("INSERT INTO externaldatabase (release_date, version, download_url, name, description) VALUES ('%s', '%s', '%s', '%s', '%s')" % (row))

TypeError: not enough arguments for format string

1 个答案:

答案 0 :(得分:1)

您需要将分隔符设置为csv.reader函数:

csvreader = csv.reader(textfile, delimiter='\t')

您没有在代码中执行此操作,因此Python不会拆分CSV文件的行。这就是它给出错误的原因。


如果您的文件包含MySQL表的所有列,则可以使用LOAD DATA INFILE 命令。它要快得多,然后逐行加载。

LOAD DATA INFILE 'externaldatabase.txt'
INTO TABLE database_name.externaldatabase
FIELDS TERMINATED BY '\t';