TypeError:在字符串格式化过程中,并非所有参数都已转换

2024-10-02 00:27:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个pythonwebscraping代码,如果不在数据库中插入任何结果,它运行得非常好。i、 当我注释掉这部分代码时

“” 连接到数据库并将数据放入 “”

db= MySQLdb.connect("localhost","XXX","XXX","hmm_Raw_Data")
cursor=db.cursor()


#checking phase to stop scrapping


sql = """SELECT Short_link FROM RentalWanted WHERE Short_link=%s"""

rows = cursor.execute(sql,(link_result))

if rows>=1:
    duplicate_count+=1
    print duplicate_count

    # if duplicate_count>=15:
    #   print "The program has started getting duplicates now- The program is terminating"
    #   sys.exit()
else:
    query="""INSERT INTO RentalWanted 
    (Sale_Rent, 
    Type, 
    Area, 
    Nearby, 
    Title,
    Price, 
    PricePerSqrFt, 
    Bedroom,
    Agency_Fee, 
    Bathroom, 
    Size,
    ZonedFor, 
    Freehold, 
    Prop_ref,
    Furnished_status,
    Rent_payment,
    Building_info,
    Amenities,
    Trade_name,
    Licence, 
    RERA_ID,
    Phone_info,
    Short_link) 
    values(
    %s,
    %s,
    %s,
    %s,
    %s,
    %s,
    %s,
    %s,
    %s,
    %s,
    %s,
    %s,
    %s,
    %s,
    %s,
    %s,
    %s,
    %s,
    %s,
    %s,
    %s,
    %s,
    %s)"""
    cursor.execute(query,(
    Sale_Rent_result,
    Type_result,
    area_result,
    nearby_result, 
    title_result, 
    price_result, 
    Pricepersq_result, 
    bedroom_result, 
    agencyfee_result, 
    bathroom_result, 
    size_result,
    Zoned_for_result, 
    Freehold_result, 
    propertyref_result, 
    furnished_result, 
    rent_is_paid_result, 
    building_result, 
    Amenities_result, 
    tradename_result, 
    licencenum_result, 
    reraid_result, 
    phone_result, 
    link_result))


db.commit()
cursor.close()
db.close()

当我把上面的代码放进去时,我得到的错误是:

^{pr2}$

我想我的问题出了问题。在

谁能帮我弄清楚哪部分需要修理吗。我花了好几个小时,但不知道我错在哪里

谢谢


Tags: 代码数据库executedbsqlcountlinkresult
2条回答

显然,MySQL python版本1.2.5中存在向后兼容性问题,当您调用execute时,它需要一个元组而不是一个字符串。在

试试这个:

rows = cursor.execute(sql,( [link_result] ))

你真的有23个独立的变量吗?最好把所有的东西都放在一本字典里,这样就更清楚了,什么是属于一起的,而且你不必数那么多。错误是,execute需要一个列表作为最后一个参数,link_result可能是一个包含多个字符的字符串,例如包含多个元素的列表:

result = {
    "Sale_Rent": Sale_Rent_result,
    "Type": Type_result,
    "Area": area_result,
    "Nearby": nearby_result,
    "Title": title_result,
    "Price": price_result,
    "PricePerSqrFt": Pricepersq_result,
    "Bedroom": bedroom_result,
    "Agency_Fee": agencyfee_result,
    "Bathroom": bathroom_result,
    "Size": size_result,
    "ZonedFor": Zoned_for_result,
    "Freehold": Freehold_result,
    "Prop_ref": propertyref_result,
    "Furnished_status": furnished_result,
    "Rent_payment": rent_is_paid_result,
    "Building_info": building_result,
    "Amenities": Amenities_result,
    "Trade_name": tradename_result,
    "Licence": licencenum_result,
    "RERA_ID": reraid_result,
    "Phone_info": phone_result,
    "Short_link": link_result,
}

db= MySQLdb.connect("localhost","XXX","XXX","hmm_Raw_Data")
cursor=db.cursor()


#checking phase to stop scrapping


sql = """SELECT Short_link FROM RentalWanted WHERE Short_link=%s"""

rows = cursor.execute(sql,(result["Short_link"],))

if rows>=1:
    duplicate_count+=1
    print duplicate_count

    # if duplicate_count>=15:
    #   print "The program has started getting duplicates now- The program is terminating"
    #   sys.exit()
else:
    query = """INSERT INTO RentalWanted ({fields}) VALUES ({values})"""
    query = query.format(fields=','.join(result), values=','.join(['%s']*len(result)))
    cursor.execute(query, result.values())

db.commit()
cursor.close()
db.close()

如果您尝试插入具有相同链接的另一行,而不是手动检查约束,则最好使列Short_link唯一并捕获错误:

^{pr2}$

相关问题 更多 >

    热门问题