2015-12-31 2 views
0

Я полностью потерян. вот мой трубопровод. Когда я запускаю его, им получает сообщение об ошибке, которое говоритошибка трубопровода с помощью mysql.connector

 File "c:\python27\lib\site-packages\twisted\internet\defer.py", line 588, in _runCallbacks 
    current.result = callback(current.result, *args, **kw) 
    File "C:\Python27\bff\bff\pipelines.py", line 42, in process_item 
    cursor.execute(add_Product) 
    File "c:\python27\lib\site-packages\mysql\connector\cursor.py", line 492, in execute 
    stmt = operation.encode(self._connection.python_charset) 
AttributeError: 'tuple' object has no attribute 'encode' 

Как вы можете видеть закомментированный код, я попробовал несколько различных способов. Сначала я делал это так, как я видел в примерах, но получал сообщение об ошибке, что параметр sadi не был определен, когда я положил (item ['StoreName']) в строку VALUES вместо того, чтобы определять его выше как Name = item ['StoreName'] Я использую mySQL.connector, который я установил с сайта mqsql.org. Заранее заблаговременно

# -*- coding: utf-8 -*- 
# Define your item pipelines here 
# Don't forget to add your pipeline to the ITEM_PIPELINES setting 
# See: http://doc.scrapy.org/en/latest/topics/item-pipeline.html 
from __future__ import print_function 
from datetime import date, datetime, timedelta 
import mysql.connector 
#from scrapy.extensions import DropItem 
#from bff.items import ItemInfo 

class mySQLPipeline(object): 
def process_item(self, item, spider): 

    Path = item['ProdPath'] 
    UPC = item['ProdUPC'] 
    Model = item['ProdModel'] 
    Desc = item['ProdDesc'] 
    Price = item['ProdPrice'] 
    Stock = item['InStock'] 
    #Ships = item['Ships'] 
    Name = item['StoreName'] 


    cnx = mysql.connector.connect(user='*****', password='*****', 
            host='127.0.0.1', 
            port='****', 
            database='scrapyinfo') 
    cursor = cnx.cursor() 

    #add_Product = ("INSERT INTO walmart_products (ProdName)" 
    #    "VALUES (%s), (Name);") 

    add_Product = ("INSERT INTO walmart_products, (ProdName, ProdPath, ProdUPC, ProdModel, ProdDesc, ProdPrice, InStock, Ships, StoreName)" 
        "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s)", (Name, Path, UPC, Model, Desc, Price, Stock, Name)) 
        #item['Ships'], 



    #Add new product 
    cursor.execute(add_Product) 

    # Make sure data is committed to the database 
    cnx.commit() 

    cursor.close() 
    cnx.close() 
    return item 

EDIT. Вот мой новый код

` 

from __future__ import print_function 
from datetime import date, datetime, timedelta 
import mysql.connector 
#from scrapy.extensions import DropItem 
#from bff.items import ItemInfo 

class mySQLPipeline(object): 
    def process_item(self, item, spider): 

     Product = item['ProdName']  
     Path = item['ProdPath'] 
     UPC = item['ProdUPC'] 
     Model = item['ProdModel'] 
     Desc = item['ProdDesc'] 
     Price = item['ProdPrice'] 
     Stock = item['InStock'] 
     #Ships = item['Ships'] 
     Name = item['StoreName'] 


     cnx = mysql.connector.connect(user='****', password='****', 
             host='127.0.0.1', 
             port='****', 
             database='****') 
     cursor = cnx.cursor() 
#  add_Product = ("INSERT INTO walmart_products (ProdName, StoreName) VALUES (%s, %s,)", Product, Name,) 
#  add_Product = ("INSERT INTO walmart_products, (ProdName)" 
#      "VALUES (%s)", (Name)) 
#      "VALUES (%(Name)s)") 
     add_Product = ("INSERT INTO walmart_products " 
         "(ProdName, ProdPath, ProdUPC, ProdModel, ProdDesc, ProdPrice, InStock, StoreName) " 
         "VALUES (%s, %s, %s, %s, %s, %s, %s, %s)") 
         #item['Ships'], 

     data_Product = (Product, Path, UPC, Model, Desc, Price, Stock, Name)           

     #Add new product 
     cursor.execute(add_Product, data_Product) 

     # Make sure data is committed to the database 
     cnx.commit() 

     cursor.close() 
     cnx.close() 
     return item 

`

+0

- это поля, заполненные списком или строкой? – eLRuLL

+0

нет списков. Вот код для моих items.py '# - * - кодирование: utf-8 - * - # Определите здесь модели для ваших скребковых предметов # # См. Документацию в: # http: //doc.scrapy .org/ен/последние/темы/items.html импорт SCRAPY класс ItemInfo (scrapy.Item): ProdPath = scrapy.Field() ProdUPC = scrapy.Field() ProdName = scrapy.Field () ProdModel = scrapy.Field() ProdDesc = scrapy.Field() InStock = scrapy.Field() ProdPrice = scrapy.Field() StoreNa me = scrapy.Field() Ships = scrapy.Field() pass' – Nick

+0

делиться тем, как вы заполняете элемент, а не декларацию элементов. – eLRuLL

ответ

0

Только в случае, если кто-то застрял, где я был, я coudn't понять это. Я расстроился и остановился, используя mysql.connector, и вместо этого использовал MySQLdb. Как только я переключился на это, все прошло отлично.

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