2013-07-15 3 views
-4

Я использую синтаксический анализ csv для импорта файлов csv в моем sql. У меня несколько таблиц в Mysql. Я хочу импортировать файл csv во всю таблицу один раз. поэтому я использую приведенный ниже скрипт. В этой стране можно импортировать, но состояние таблицы было не показать мне следующую ошибкуИмпорт Mysql из сценария

csv_spliter.py:74: Warning: Incorrect integer value: ''country_id'' for column 'id' at row 1 
    row) 
csv_spliter.py:74: Warning: Incorrect integer value: ''0'' for column 'id' at row 1 
    row) 
csv_spliter.py:74: Warning: Incorrect integer value: ''1'' for column 'id' at row 1 
    row) 
csv_spliter.py:74: Warning: Incorrect integer value: ''2'' for column 'id' at row 1 
    row) 
csv_spliter.py:74: Warning: Incorrect integer value: ''3'' for column 'id' at row 1 
    row) 
Done 
Traceback (most recent call last): 
    File "csv_spliter.py", line 89, in <module> 
    row) 
    File "/usr/lib/python2.7/dist-packages/MySQLdb/cursors.py", line 174, in execute 
    self.errorhandler(self, exc, value) 
    File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 36, in defaulterrorhandler 
    raise errorclass, errorvalue 
_mysql_exceptions.IntegrityError: (1452, 'Cannot add or update a child row: a foreign key constraint fails (`lcm`.`state`, CONSTRAINT `state_ibfk_1` FOREIGN KEY (`country`) REFERENCES `country` (`id`) ON DELETE CASCADE)') 
[email protected]:~/Desktop$ 


     <i>  

     # initialize with empty ints and dicts 
     name,cities,countries,states=[],[],[],[] 

     with open('ind.csv','rb') as csvfile: 
      reader = csv.reader(csvfile, delimiter=',') 
      reader.next() #skip header 
      for row in reader: 
       name.append(row[0]) 
       cities.append(row[2]) 
       states.append(row[3]) 
       countries.append(row[4]) 
     cl = list(set(countries)) 
     sl = list(set(states)) 
     citl = list(set(cities)) 
     inf1 = list(set(name)) 



     with open('countries.csv','w') as cfile: 
      writer = csv.writer(cfile, delimiter=',') 
      writer.writerow(['country_id','name']) 
      for i,x in enumerate(cl): 
       writer.writerow([i,x]) 

     with open('state.csv','w') as cfile: 
      writer = csv.writer(cfile, delimiter=',') 
      writer.writerow(['state_id','country_id','state']) 
      for i,x in enumerate(sl): 
       writer.writerow([i,x,cl.index(countries[states.index(x)])]) 

     with open('cities.csv','w') as cfile: 
      writer = csv.writer(cfile,delimiter=',') 
      writer.writerow(['city_id','city','st_id','country_id']) 
      for i,x in enumerate(citl): 
       writer.writerow([i,x,sl.index(states[cities.index(x)]), 
           cl.index(countries[cities.index(x)]) 
           ]) 


     with open('inf123.csv','w') as cfile: 
      writer = csv.writer(cfile,delimiter=',') 
      writer.writerow(['Name_id', 'Name','city_id','st_id','country_id']) 
      for i,x in enumerate(inf1): 
       writer.writerow([i,x, 
           citl.index(cities[name.index(x)]), 
           sl.index(states[name.index(x)]), 
           cl.index(countries[name.index(x)]) 

           ]) 

     import MySQLdb 
     import csv 
     mydb = MySQLdb.connect(host="localhost", # The Host 
     user="root", # username 
     passwd="root", # password 
     db="abcm") # name of the data base 


     cursor = mydb.cursor() 

     csv_data = csv.reader(file('countries.csv')) 
     for row in csv_data: 

      cursor.execute('INSERT INTO country(id, \ 
        name)' \ 
        'VALUES("%s", "%s")', 
        row) 
     #close the connection to the database. 
     mydb.commit() 
     cursor.close() 
     print "Done" 


     cursor = mydb.cursor() 

     csv_data = csv.reader(file('state.csv')) 
     for row in csv_data: 

      cursor.execute('INSERT INTO state(id, \ 
        country, name)' \ 
        'VALUES("%s", "%s", "%s")', 
        row) 
     #close the connection to the database. 
     mydb.commit() 
     cursor.close() 
     print "Done" 
     </i> 

Может ли один дать мне несколько советов, как я могу это сделать?

ответ

0

Вы преобразовываете свои строки в целые числа, прежде чем сбросить их в базу данных?

Я думаю, что здесь появляются сообщения об ошибках Incorrect integer value.

+0

Я также получил целочисленное значение. Но я покажу ту же ошибку – Rohit

Смежные вопросы