У меня есть база данных, которая содержит 7 полей, поле 1 уникально, а остальные нет. Однако поля 2 и 3 могут быть нулевыми. Я пытаюсь обновить базу данных информацией из файла csv, чтобы заполнить нули, но я не могу заставить его работать. Поле может быть нулевым или поле может уже содержать информацию.MySQL, строка обновления python, если 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 formatting
Edit1:
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'
Edit 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")
апостроф ВЕРНУЛСЯ
Так в чем же проблема? – Mureinik
Поскольку вы не предоставляете ошибку, которую получаете, я буду держать пари, что она связана с неправильным синтаксисом SQL в ваших операциях 'update'. Первым, например, должно быть «update fileSort set hostNames = hostNames, где hostNames не null». Также обратите внимание, что вы не выполняете второй оператор. – DeepSpace
он выполнит, но ничего не сделает, но я могу увидеть нулевые поля, и я могу найти значение в файле csv –