查询在psql中工作但在Python中使用psycopg2时出现语法错误

时间:2015-03-30 21:40:16

标签: python postgresql psycopg2 psql

我有一个在psql中运行良好的查询,但在我的程序中生成错误:

sql = 'SELECT id, x, y FROM table_name WHERE y NOT LIKE 'pa%' AND x IS NOT NULL;' 
cur.execute(sql)

关于它为什么不起作用的任何指示?或任何建议,我如何解决它?

2 个答案:

答案 0 :(得分:5)

它不是PostgreSQL vs MySQL查询语法 - 这在Python中只是语法错误:

>>> sql = 'SELECT id, x, y FROM table_name WHERE y NOT LIKE 'pa%' AND x IS NOT NULL;' 
  File "<stdin>", line 1
    sql = 'SELECT id, x, y FROM table_name WHERE y NOT LIKE 'pa%' AND x IS NOT NULL;' 
                                                              ^
SyntaxError: invalid syntax

将查询放入双引号中:

sql = "SELECT id, x, y FROM table_name WHERE y NOT LIKE 'pa%' AND x IS NOT NULL;"

答案 1 :(得分:0)

Python中代码字符串的良好实践是三引号字符串,它使得它更清晰,可以包含单引号和双引号:

sql = '''
    SELECT id, x, y
    FROM table_name
    WHERE y NOT LIKE 'pa%' AND x IS NOT NULL;
'''

来自manual

  

三引号字符串可能跨越多行 - 所有相关的空格都将包含在字符串文字中。