2017-03-16 8 views
1

要するに、小売用のUPCに価格を比較するスクリプトがあります。Python MySQLインクリメントしていますが挿入しません。

クエリはデータを挿入しませんが、ID番号を増やします(操作ではデータなし)。クエリを貼り付けて、それをMySQLにコピー&ペーストすると、ペーストが正常に行われます。操作の

ステップ:

グラブUPC upc.txt

からウェブサイト

に比較価格とウェブサイト(ウェブサイト参照リンクが含まれています(実際のリンクを待つ)

送信を取得します。データベースに

実際にデータが挿入されていないというエラーは表示されません。操作の自動増分IDが変更されました。

サイドノート、これは完全に草案です。私はSQLインジェクションがオープンであることを認識しています。 fetchAllをやって、なぜ

import urllib 
import re 
import MySQLdb 
import requests 

upcfile = open("upc.txt") 

upcslist = upcfile.read() 


newupclist = upcslist.split("\n") 

conn = MySQLdb.connect(host="127.0.0.1",user="root",passwd="",db="Items") 
i=0 
while i < len(upcslist): 
    url = "https://www.(REMOVED).com/search"+newupclist[i]+"?view=list" 
    htmlfile = urllib.urlopen(url) 
    htmltext = htmlfile.read() 
    regex = '<td class="price-column">(.+?)</td>' 
    pattern = re.compile(regex) 
    price = re.findall(pattern,htmltext) 
    itemLinkRegex = '<td class="link-column"><a href="(.+?)" target="_blank">' 
    itemLinkPattern = re.compile(itemLinkRegex) 
    itemLink = re.findall(itemLinkPattern,htmltext) 
    p=0 
    try: 
     while p <len(price): 
      try: 
       r = requests.get(itemLink[p], allow_redirects=False) 
       itemLinkFormat = r.headers['Location'] 
      except: 
       itemLinkFormat = itemLink[p] 
       pass 
      #print "Sent to Database Competitor Price: UPC ["+newupclist[i]+"] - Price: ", price[p]+" Item URL: ", itemLinkFormat 
      pre = ''.join(price[p].split('$', 1)) 
      priceformat = ''.join(pre.split(',', 1)) 
      skuNumber = newupclist[i] 
      try: 
       query = "INSERT INTO Entry (SKU, Price, Item_link) VALUES (" 
       query = query+"'"+skuNumber+"','"+priceformat+"','"+itemLinkFormat+"')" 
       print query 
       x = conn.cursor() 
       x.execute(query) 
       row = x.fetchall() 
      except: 
       print "Error, Not a valid number to enter into database." 
       pass 
       p+=1 
      p+=1 
     i+=1 
    except: 
     pass 
     i+=1 

答えて

1

が表示されない、影響を受けた行を確認してcon.commit()、その後cur.rowcountを試してみてください。

また、あなたの漁獲量は、おかげでチームメイト、この

except cur.Error, e: 

    if con: 
     con.rollback() 

    print "Error %d: %s" % (e.args[0],e.args[1]) 
    sys.exit(1) 
+0

ようなことができ..完全に働いた:) – hinteractive02

+0

それは喜んhinteractive02 @ :) – Alfabravo

関連する問題