我目前在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.爲什麼會發生這種情況?
好,那是因爲它們不是同一個查詢。 'date(created_time)>'2016-10-01''和'created_time>'2016-10-01''是不同的標準。時間戳「2016-10-01 01:00:00」與後者匹配,但不是前者。 – univerio
是的!這確實是個問題......而且我非常尷尬,因爲我錯過了它,並被困在它上面幾個小時:-(非常感謝! – Coati