繁体   English   中英

SQL Alchemy ORM和相同查询的Text返回不同的结果?

[英]SQL Alchemy ORM and Text of same query returns different results?

我目前在Python中有一个脚本,使用SQL Alchemy的text函数执行查询以收集有关我的Facebook帖子的统计信息。 我正在尝试更新它以使用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 vs150。为什么会这样?

您的SQL语句语法错误。 AND article_id IS NOT NULL行变成注释,并且未实现AND article_id IS NOT NULL 尝试将其更改为

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

感谢上面的univerio的评论,我去寻找如何在SQL Alchemy中指定DATE()并通过将其更改为以下内容使其工作:

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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM