我有一个包含7个字段的数据库,字段1是唯一的,其余的则不是。但是,字段2和3可能为空。我试图用csv文件中的信息更新数据库,以填充空值,但我无法让它工作。该字段可能为null,或者该字段可能已经包含该信息。
db=mdb.connect('localhost','username','password','db')
cur=db.cursor()
inputinfo=csv.reader(open('Insert.csv','r'),delimiter=',')
for row in inputinfo:
inserthostNames=("""update fileSort set hostNames=values(hostNames) where hostNames is not null""")
cur.execute(inserthostNames,row[1])
insertIPAddress=("""update fileSort set IPAddress=values(IPAddress) where IPAddress is not null""")它不起作用,给了我错误
Traceback (most recent call last):
File "test.py", line 57, in <module>
insertTADDM()
File "test.py", line 47, in insertTADDM
cur.execute(inserthostNames,row[1])
File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 159, in execute
query = query % db.literal(args)
TypeError: not all arguments converted during string formattingEdit1:
for row in inputinfo:
inserthostNames=("""update fileSort set hostNames=hostNames where hostNames is null""",row)
cur.execute(inserthostNames,row[1])
insertIPAddress=("""update fileSort set IPAddress=IPAddress where IPAddress is null""",row)
cur.execute(insertIPAddress,row[2])这就产生了错误:
TypeError: unsupported operand type(s) for %: 'tuple' and 'str'编辑2:
for row in inputinfo:
inserthostNames=("""update fileSort set hostNames='%s' where hostNames is null""")
cur.execute(inserthostNames,(db.escape_string(row[1])))
#insertIPAddress=("""update fileSort set IPAddress='%s' where IPAddress is null""")
#cur.execute(insertIPAddress,row[2])
db.commit()给我:
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'SERVER2'' where hostNames is null' at line 1")撇号又回来了
发布于 2015-07-23 16:21:15
execute函数包含一个参数row[1],但查询字符串中没有替换位置。此外,参数必须作为序列传递。此外,如果您想要填充空,那么where条件应该是where hostNames is null。
此外,由于hostNames可能包含特殊字符,因此您可能希望使用conn.escape_string转义它。
您可能希望将查询更改为:
inserthostNames=("""update fileSort set hostNames='%s' where hostNames is null""")
cur.execute(inserthostNames,(db.escape_string(row[1])))发布于 2015-07-23 16:37:49
我不确定这是否正是您所说的,但我在mysql解释空值并通过更改源文件来修复它时遇到了一些问题。我修改了源文件,将空白单元格替换为字符串"Null“。程序写入一个新的文件,所以您的初始文件应该是未修改的。所编写的文件并不完美,但可以轻松地在excel中进行修改,以获得正确的格式。然后,我使用一个本地幼稚将其重新加载到数据库中。希望这会有所帮助,如果您对代码有问题,请告诉我。
import csv
output= open("practice_output.csv","w") #Replace practice_output.csv with desired output name.
with open('practice.csv',"rU") as csvfile: #replace practice.csv with input file name.
ACS = csv.reader(csvfile, delimiter=' ', quotechar='|')
count= [] # A rough way to track how fast the program reads through lines.
for row in ACS:
row=','.join(row)
row=row.split(",")
list = []
for item in row:
print item
item=str(item)
if item != "":
#output.write(item + ",")
list.append(item)
else:
item= item.replace("","NULL")
#output.write(item+",")
list.append(item)
list=','.join(list)
count.append("1")
print len(count) ### Allows to show when each line is completed when running very large files.
output.write(list+"\r\n,")
output.close()https://stackoverflow.com/questions/31592549
复制相似问题