mariaDB:列数与第1行的值数不匹配

时间:2019-09-08 12:28:58

标签: python mysql syntax mariadb

我不明白这是什么问题。我想构建一个网络刮板,用于刮擦亚马逊并将价格和名称输入数据库。但是由于某种原因,它告诉我列和值不匹配。我的数据库中确实有另外一列称为“ timestamp”,我会在其中自动输入时间,但这是由数据库处理的。我正在使用MariaDB。一位朋友说我也可以将MySQL API用于MariaDB。

P.S。 preis =价格,来自德国,有时会在英语和德语之间切换,以防万一有人想知道。

setProp

错误消息:

import requests, time, csv, pymysql
from bs4 import BeautifulSoup as bs

#URL = input("URL")
URL = "https://www.amazon.de/gp/product/B075FTXF15/ref=crt_ewc_img_bw_3?ie=UTF8&psc=1&smid=A24FLB4J0NZBNT"
def SOUPIT (tempURL):
    URL = tempURL
    page = requests.get(URL,headers={"User-Agent":"Defined"})
    soup = bs(page.content, "html.parser")

    raw_price = soup.find(id="priceblock_ourprice").get_text()
    price = raw_price[:-2]


    raw_name = soup.find(id="productTitle").get_text()
    name = raw_name.strip()

    for i in range(0,len(name)-1):
        if name[i] == "(":
            name = name[:i]
            break
    data = [name, price, time.strftime("%H:%M:%S"), time.strftime("%d.%m.%Y")]

    return(data)

data = SOUPIT(URL)

while True:

    data = SOUPIT(URL)

    db = pymysql.connect("localhost", "root", "root", "test")
    cursor = db.cursor()

    if (data == None):
        break
        print("break")
    else:
        name = data[0]
        preis = data[1]
        sql = """INSERT INTO amazon_preise (Name, Preis) VALUES ('{}',{})""".format(name,preis)
        cursor.execute(sql)
        db.commit()
        print("success")

    print(data)
    time.sleep(60)

1 个答案:

答案 0 :(得分:0)

该问题至少部分是由使用字符串格式将值插入SQL语句引起的。

以下是抓取的数据:

>>> data = ['Sweatshirt Alien VS. Predator Z100088', '32,99', '14:08:43', '08.09.2019']
>>> name, preis, *_ = data

让我们创建SQL语句

>>> sql = """INSERT INTO amazon_preise (Name, Preis) VALUES ('{}',{})""".format(name,preis)

并显示它:

>>> sql
"INSERT INTO amazon_preise (Name, Preis) VALUES ('Sweatshirt Alien VS. Predator Z100088',32,99)"

请注意,VALUES子句包含三个逗号分隔的值;这是因为该网页以德国风格显示货币,即用逗号将美分与欧元分开。插值到SQL语句时 preis变成两个值,而不是一个。

解决此问题的正确方法是将preis从字符串转换为浮点数或小数,并使用参数替换而不是字符串格式对值进行插值。

>>> fpreis = float(preis.replace(',', '.'))
>>> sql = """INSERT INTO amazon_preise (Name, Preis) VALUES (%s, %s)"""
>>> cursor.execute(sql, (name, fpreis))