2012-10-30 29 views
0

我建立使用Python的TweepyMySQLdb模塊檢查,如果行存在於表中的SQL

Twitter的應用程序抓取加入之前

將獲取數以百萬計的鳴叫所以性能是一個問題 我要檢查tweet_id在表之前存在於同一個查詢添加它之前

表模式是:

*id* | tweet_id    |  text 
    _____|________________________|______________________________ 
    1 | 259327533444925056 |  sample tweet1 
    _____|________________________|______________________________ 
    2 | 259327566714923333 |  this is a sample tweet2 

代碼次在我想是,但它做雙重查詢:

#check that the tweet doesn't exist first 
q = "select count(*) from tweets where tweet_id = " + tweet.id 
cur.execute(q) 
result = cur.fetchone() 
found = result[0] 
if found == 0: 
q = "INSERT INTO lexicon_nwindow (tweet_id,text) VALUES(tweet_id,tweet.text) 
cur.execute(q) 

使得Tweet_id獨特,只需插入微博,將引發異常,並不會有效呢?

那麼什麼是最好的表現方法來實現這與一個查詢?

+0

[如何在MySQL中插入'如果不存在'?](http://stackoverflow.com/questions/1361340/how-to-insert-if-not-exists-in-mysql) – Jocelyn

回答

1

如果您將tweet_id作爲主鍵(放置字段ID),則可以使用INSERT IGNORE或REPLACE INTO。 2解決的問題1.

如果要保留Id字段,請將其設置爲索引/唯一併將其設置爲自動遞增。如果我知道tweet_id可以用作主鍵,我會避開這種方法。

希望這會有所幫助。

哈日

0
#check that the tweet doesn't exist first 
q = "select count(*) from tweets where tweet_id = " + tweet.id 
cur.execute(q) 
result = cur.fetchone() 
found = result[0] 
if found == 0: 
q = "REPLACE lexicon_nwindow (tweet_id,text) VALUES(tweet_id,tweet.text) 
cur.execute(q) 
0

使用INSERT SELECT而不是插入值,並在您選擇添加一個WHERE子句來檢查您的tweet.id是不是已經在表中

q = "INSERT INTO lexicon_nwindow (tweet_id,text) 
SELECT " + tweet.id +" ," + tweet.text +" FROM DUAL 
WHERE not exists(select 1 from tweets where tweet_id = " + tweet.id +") " 
0

答案個人資料,請勿推測

我不是不屑一顧。我們不知道會是什麼最快:

  • SELECT +(代碼)有條件的INSERT
  • REPLACE INTO
  • INSERT忽略
  • INSERT SELECT WHERE NOT EXISTS ...)
  • INSERT和(在代碼中)忽略錯誤

我們不知道數據的速率,重複的頻率,服務器配置,是否有多個編寫者同時狡猾等

簡介,不要推測。

相關問題