我使用名为option的列创建了一个数据库,其中值是'Call','Put'或None的varchar。当我设置数据库时,如果没有Call或Put,我将默认值设为None。
我正在尝试过滤掉包含'Call'或'Put'选项的行。但是,当我写查询时
SELECT * FROM holdings h 何处h.option!='呼叫' AND h.option!='Put';
I get this error:
curr.execute('SELECT option FROM holdings WHERE option != 'Call';')
^
SyntaxError: invalid syntax
当我尝试使用NOT LIKE'%Call%'时,我收到此错误:
curr.execute('SELECT option FROM holdings AS h WHERE option NOT LIKE '%Call%';')
NameError: name 'Call' is not defined
任何帮助将不胜感激
谢谢!
代码如下所示:
import psycopg2
import csv
conn = psycopg2.connect('dbname = db user = asmith')
curr = conn.cursor()
curr.execute('SELECT option FROM holdings h WHERE option NOT LIKE '%Call%';')
tups = curr.fetchall()
for tup in tups:
print tup
编辑: 当我运行这两行时:
curr.execute('SELECT * FROM holdings h WHERE option = \'Call\' OR option = \'Put\';')
curr.execute('SELECT * FROM holdings h WHERE option != \'Call\' AND option != \'Put\';')
第一个查询给了我所有带有Call或Put的行,但是当我运行第二个查询时,我什么也得不到,即使它理论上应该给我所有带有None选项的行。有谁知道为什么会这样?
答案 0 :(得分:3)
在这里看起来像语法错误:
curr.execute('SELECT option FROM holdings h WHERE option NOT LIKE '%Call%';')
字符串1是'SELECT option FROM holdings h WHERE option NOT LIKE '
,与'
(在%Call%
之前)中断,然后是一些名为Call的变量(您的编译器无法找到),然后是字符串2 ';'
< / p>
您必须使用反斜杠转义'
:
curr.execute('SELECT option FROM holdings AS h WHERE option NOT LIKE \'%Call%\';')
答案 1 :(得分:0)
声明中存在逻辑错误。你应该写这个:
SELECT * FROM holdings h WHERE h.option != 'Call' OR h.option != 'Put';
或者这个:
SELECT * FROM holdings h WHERE h.option NOT IN ( 'Call' , 'Put');
感谢。