2016-11-07 113 views
0

我目前在Python中有一個腳本,使用SQL Alchemy的文本函數來執行查詢以收集有關我的Facebook帖子的統計信息。我試圖更新它來使用ORM,但是對於我看來是相同的查詢,我得到了不同的結果。例如,一個文本查詢如下:SQL Alchemy ORM和相同查詢的文本返回不同的結果?

mysql> SELECT COUNT(facebook_posts.id) AS temphold 
FROM facebook_posts 
WHERE shares < 10  AND account_id=‘12345’ AND article_id IS NOT NULL 
AND date(created_time) > '2016-10-01' AND date(created_time) < '2016-10-05'; 

+----------+ 
| temphold | 
+----------+ 
|      104 | 
+----------+ 

1 row in set (0.02 sec) 

然後與ORM:

under_10 = session.query(func.count(FacebookPost.id)).\ 
         filter(FacebookPost.shares < 10, 
           FacebookPost.account_id == '12345', 
           FacebookPost.article_id != None).\ 
         filter(FacebookPost.created_time > start, 
           FacebookPost.created_time < end) 

under_10 = session.execute(under_10) 

當我打印查詢似乎是相同的:

SELECT count(facebook_posts.id) AS count_1  
FROM facebook_posts  
WHERE facebook_posts.shares < 10 
AND facebook_posts.account_id = '12345' 
AND facebook_posts.article_id IS NOT NULL 
AND facebook_posts.created_time > 2016-10-01 
AND facebook_posts.created_time < 2016-10-05 

(150L,) 

這似乎是一樣的,但結果是不同的 - 104 vs 150.爲什麼會發生這種情況?

+0

好,那是因爲它們不是同一個查詢。 'date(created_time)>'2016-10-01''和'created_time>'2016-10-01''是不同的標準。時間戳「2016-10-01 01:00:00」與後者匹配,但不是前者。 – univerio

+0

是的!這確實是個問題......而且我非常尷尬,因爲我錯過了它,並被困在它上面幾個小時:-(非常感謝! – Coati

回答

0

由於univerio的評論上面我就在SQL鍊金術尋找如何指定日期()得到它通過改變它的工作爲以下:

under_10 = session.query(func.count(FacebookPost.id)).\ 
         filter(FacebookPost.shares < 10, 
           FacebookPost.account_id == '1234', 
           FacebookPost.article_id != None).\ 
         filter(func.date(FacebookPost.created_time) > start, 
           func.date(FacebookPost.created_time) < end) 
0

您的SQL語句是錯誤的語法。 #正在將該行變成註釋,並且AND article_id IS NOT NULL未被執行。請嘗試更改到

...WHERE shares < 10 AND account_id="account#" 
AND article_id IS NOT NULL... 
+0

#實際上並不在我的代碼中,我只是不想,但是我使用的號碼實際上是:session.query(func.count(FacebookPost.id))。\ filter(FacebookPost.shares <10,FacebookPost.account_id =='12345', FacebookPost.article_id!= None )。\ 過濾器(FacebookPost.created_time>開始,FacebookPost.created_time <結束) – Coati

+0

雖然感謝!我更新了它,所以它不那麼容易混淆 – Coati

+0

您是否嘗試將直線引號更改爲直引號? – Sam

相關問題