Python:sqlite OR语句

Aus*_*ams 2 python sql linux sqlite ubuntu

是否有OR sqlite语句?我一直试图谷歌它,但谷歌似乎过滤了OR.

例如,如果我想在此表中找到某人(人)

people:
+--fname--+--lname--+--has_squirrel--+
|Eric     |Schmidt  |0               |
+---------+---------+----------------+
|Elvis    |Presley  |1               |
+---------+---------+----------------+
|Richard  |Stallman |0               |
+---------+---------+----------------+
Run Code Online (Sandbox Code Playgroud)

用Elvis或Richard的名字命名,我的疑问是什么?

我已经尝试了类似的东西select * from people where fname=('Elvis' or 'Richard'),但这总是让Eric Sc​​hmidt回归(与我想要的完全相反的行)!

我也试过select * from people where fname='Elvis' or 'Richard'但是返回表中的所有行!

我在Ubuntu 10.10上使用Python 2.6 sqlite3模块.有人能给我一个关于sqlite OR语句的快速解释,还是告诉我它是否不存在?我试过RTFM而且找不到任何东西(在sqlite网站上搜索OR会发出一堆错误!).

谢谢!

Vin*_*ard 20

它将是其中之一:

SELECT * FROM people WHERE fname IN ('Elvis', 'Richard');
SELECT * FROM people WHERE fname = 'Elvis' OR fname = 'Richard';
Run Code Online (Sandbox Code Playgroud)

我很惊讶您的第一个查询甚至可以正常工作,而在您的第二个查询中,or 'Richard'基本上意味着or 1=1,对于表中的每一行,它总是如此.

你的电脑不像你那样思考.即使你fname = 'Elvis' or 'Richard'看起来很明显,RDBMS也不知道你的意思,并且读"如果fname等于'Elvis'或...... true".它将字符串评估为布尔值,我认为因为它不是空的,所以它被评估为true.然后继续选择你桌子上的每一行,如前所述.