SQLAlchemy Crash Script при использовании Session.Merg () - PullRequest
0 голосов
/ 22 октября 2018

У меня есть скрипт, который использует Amazon API для поиска элементов на основе UPC, а затем сохранить их в базе данных MySql.По какой-то причине, когда я использую session.merge, он случайно вылетает из сценария.Использование session.add работает, но при наличии дубликата в базе данных ошибки сценария при фиксации.

Кроме того, при сбое сценария он не выдает никаких ошибок.

Есть липричина, по которой session.merge вызывает сбой сценария или способ, которым session.add может обновить дубликаты записей на session.commit?

Спасибо,

Код:

upcs = <List of UPC Codes>
# Breaking the list into groups of 10 for Amazon API
group = 10
sub_upcs = [upcs[i:i+group] for i in range(0, len(upcs), group)]

for sub_upc in sub_upcs:
    try:
        products = amazon.lookup(ItemId=','.join(sub_upc), IdType='UPC', SearchIndex='All')
    except AsinNotFound as e:
        print("UPC Not Found")
    except Exception as e:
        print(e)

    if type(products) is list:
        for product in products:
            am_item = Item(product)
            session.merge(am_item.db_item)
    else:
        am_item = Item(products)
        session.merge(am_item.db_item)

try:
    session.commit()
    print("Session Written")
except Exception as e:
    print(e)

ЭлементКласс:

class AmazonItem(Base):
    __tablename__ = 'amazon_products'
    timestamp = Column(TIMESTAMP)
    itemid = Column(String, primary_key=True, index=True, unique=True)
    name = Column(String)
    upc = Column(String, index=True)
    msrp = Column(Float)
    price = Column(Float)
    brandname = Column(String)
    modelnumber = Column(String)
    url = Column(String)

    def __init__(self, item):
        self.timestamp = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')
        self.itemid = item.asin
        self.name = item.title
        self.upc = item.upc
        self.msrp = item.price_and_currency[0]
        self.price = item.price_and_currency[0]
        self.brandname = ""
        self.modelnumber = ""
        self.url = item.offer_url


class Item():
    item = None
    db_item = None
    store = ""
    itemid = ""
    name = ""
    upc = ""
    msrp = 0
    price = 0
    brandname = ""
    modelnumber = ""

    def __init__(self, item):
        self.timestamp = datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S')
        self.item = item
        self.db_item = AmazonItem(item)
        self.store = "Amazon"
        self.itemid = item.asin
        self.name = item.title
        self.upc = item.upc
        self.msrp = item.price_and_currency[0]
        self.price = item.price_and_currency[0]
        self.brandname = ""
        self.modelnumber = ""
        self.url = item.offer_url
        self.asin = item.asin

        if self.msrp == 0 or self.msrp is None:
            self.msrp = self.price

        if self.price == 0 or self.price is None:
            self.price = self.msrp

    def __eq__(self, other):
        return self.itemid == other.itemid

    def __hash__(self):
        return hash(('itemid', self.itemid))

    def writetocsv(self, file):
        csv_writer = CSVWriter(file)
        csv_writer.addrow(self.getrow())
        csv_writer.write()
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...