Nano Hash - криптовалюты, майнинг, программирование

CSV-файл в базу данных MySQL, вставки не работают

Я пытаюсь получить файл CSV в базу данных MYSQL, но он никогда не появляется! Не знаю, может я что-то напутал, но вы, ребята, должны посмотреть.

    # its time for fetching data :)
   import csv
   import urllib2
   path = 'C:\\Users\\User\\Desktop\\Downloads\\'
   response = urllib2.urlopen('https://files.ontario.ca/opendata/births_by_year_and_month_per_place_of_event_city_2010_0.csv')
   html = response.read()

   file=open( path +"births.CSV", "r")
   reader = csv.reader(file)



   for row in reader:
       print row

   #Server Connection to MySQL:

   import MySQLdb
   conn = MySQLdb.connect(host= "localhost",
                     user="root",
                     passwd="admin",
                     db="cool")
   x = conn.cursor()

   try:
      x.execute("""INSERT INTO import (test) VALUES (%s,%s,%s,%s)""",(row))
      conn.commit()
   except:
      conn.rollback()

   conn.close()

Он заканчивается кодом выхода 0, печатает все, но никогда не вставляет в базу данных. Вот образец печати

['2010', 'Sep', 'THUNDER BAY', '132']
['2010', 'Sep', 'TIMMINS', '59']
['2010', 'Sep', 'TORONTO', '3412']
['2010', 'Sep', 'WELLAND', '58']
['2010', 'Sep', 'WELLINGTON NORTH', '6']
['2010', 'Sep', 'WINDSOR', '337']
['2010', 'Sep', 'WOODSTOCK', '50']

Process finished with exit code 0

EDIT Я не уверен, что часть %s как-то связана с этим, но мне нужна помощь. Спасибо!

Редактировать 2 Отлично! Спасибо всем людям, которые помогли мне. Но теперь есть новое редактирование, и я не могу понять, что происходит не так. Вот новый код!

     import csv
     import urllib2
     path = 'C:\\Users\\hongyu\\Desktop\\Downloads\\'
     response =  urllib2.urlopen('https://files.ontario.ca/opendata/births_by_year_and_month_per_ place_of_event_city_2010_0.csv')
     html = response.read()

     file=open( path +"births.CSV", "r")
     reader = csv.reader(file)
     #Server Connection to MySQL:

     import MySQLdb
     conn = MySQLdb.connect(host= "localhost",
                       user="root",
                       passwd="admin",
                       db="cool")

     for row in reader:
         x = conn.cursor()

         try:
             x.execute("""INSERT INTO testing (year, month, city, num)          VALUES (%s,%s,%s,%s)""", (row))
             conn.commit()
         except :
            conn.rollback()
             print(row)
             print("This row failed to insert")

     conn.close()

Теперь, когда я запускаю код, он сообщает мне, какую строку не удалось вставить. Но было много неудачных строк. Вот немного результата.

  ['1994', 'Dec', 'KAPUSKASING', '10']
  This row failed to insert
  ['1994', 'Dec', 'KENORA', '29']
  This row failed to insert
  ['1994', 'Dec', 'KINCARDINE', '11']
  This row failed to insert
  ['1994', 'Dec', 'KINGSTON', '198']
  This row failed to insert
  ['1994', 'Dec', 'KIRKLAND LAKE', '13']
  This row failed to insert
  ['1994', 'Dec', 'KITCHENER', '363']
  This row failed to insert
  ['1994', 'Dec', 'LEAMINGTON', '31']
  This row failed to insert  

Любая помощь? в базе нет почти всего, и вот немного из этого. http://prntscr.com/h6dhod P.S. Это не только города, начинающиеся с буквы a, но и Торонто.

02.11.2017

  • Вы пытаетесь вставить 4 значения, но у вас есть только 1 имя столбца в списке столбцов. 02.11.2017
  • Попробуйте напечатать сообщение об ошибке в блоке except:. 02.11.2017
  • Как распечатать сообщения об ошибках? 07.11.2017
  • stackoverflow.com/questions/30996401/ 07.11.2017

Ответы:


1

Поскольку вы пытаетесь вставить 4 значения, вам нужно иметь 4 имени столбца в списке столбцов.

  x.execute("""INSERT INTO import (year, month, city, num) VALUES (%s,%s,%s,%s)""",(row))

Замените имена столбцов фактическими столбцами в вашей таблице.

И эта строка должна быть внутри цикла for row in reader:, который должен быть после того, как вы откроете соединение с MySQL. В противном случае вы вставляете только последнюю строку файла.

02.11.2017

2

Я бы посоветовал вам рассмотреть возможность использования MySQL LOAD DATA здесь:

conn = MySQLdb.connect(host= "localhost",
                 user="root",
                 passwd="admin",
                 db="cool")
cursor = conn.cursor()
query = "LOAD DATA INFILE '/path/to/your/file.csv' INTO TABLE import FIELDS TERMINATED BY ',' ENCLOSED BY '\"' ESCAPED BY '\\\\'"
cursor.execute( query )
conn.commit()

Это избавит вас от необходимости беспокоиться о правильном количестве столбцов, а также должно работать намного лучше, чем выполнение многих операторов вставки.

02.11.2017

3

пожалуйста, поймите, что CSV = значения, разделенные запятыми. вам нужно будет взорвать его в первую очередь.

$item = explode(",",$row);   //which will give you the array

и в вашей вставке вы можете использовать $item[0], $item[1] и т. д.

02.11.2017
  • Вопрос помечен как Python. Однако я не верю, что ваш ответ на этом языке. 02.11.2017
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..