擅长:python、mysql、java
<p>我不确定答案,我只想指出一些事情,因为我最近在sqlalchemy下使用布尔查询时遇到了一些问题。。。在</p>
<ul>
<li><p>您应该将布尔值比较为'==True'和'==False'。MySQL将Boolean存储为1/0,但是PostgreSQL和其他一些存储为true/false,Python也是如此。SqlAlchemy可以根据需要进行转换,但是当您查看其他人的代码时。。。好吧,这看起来像一个整数比较,而不是一个布尔。对其他将来不得不看这个的人来说会更容易。</p></li>
<li><p>根据SQL存储引擎和列默认值,您可能无法获得所需的结果。如果集合中允许空值,则比较将不匹配。您将通过以下搜索获得所需的结果:</p>
<p><code>Event.regular.op('IS NOT')(True)</code></p>
<p><code>Event.regular.op('IS')(False)</code></p>
<p><code>sqlalchemy.sql.functions.coalesce( Event.regular , False ) != True</code>
<code>sqlalchemy.sql.functions.coalesce( Event.regular , False ) == False</code></p></li>
</ul>
<p>在第一段代码中,我们搜索不为True的项,这些项将同时为False和NULL。<code>regular != True</code>的结果集只包含<code>False</code>项;<code>regular IS NOT True</code>的结果集包含<code>False</code>和{<cd9>}</p>
<p>在第二位代码中,数据库将在比较之前将<code>Null</code>值合并为<code>False</code>。在</p>
<p>你可能不需要做这些比较,但如果你做了这些比较,你的结果看起来不对,这可能就是原因。在</p>