正确的Postgresql语法

时间:2014-01-14 15:46:37

标签: python postgresql

我是一名postgres新手,并且在使用Python查询postgresql中的文本字段时遇到了一些问题。允许我搜索列" body"的内容的正确语法是什么?来自表" jivemessage"超出数据库" postgres"?

try:
    conn = psycopg2.connect("dbname='postgres' user='postgres' host='localhost'  password='<password>'")

except:
    print "cannot connect"

i = 'test'
cur = conn.cursor()

cur.execute('SELECT * from jivemessage WHERE body LIKE "%'+i+'%"')

继续收到以下错误:

ProgrammingError: column "%test%" does not exist

感谢您的帮助。

1 个答案:

答案 0 :(得分:2)

您没有正确引用查询。不要在此处使用字符串连接,而是使用SQL parameters

cur.execute('SELECT * from jivemessage WHERE body LIKE %s', ("%{}%".format(i),))

这里,%s占位符向数据库驱动程序发出信号,询问第二个参数的第一个值应该放在那里。

这样就可以将插值留给数据库驱动程序,即使您要重复使用相同的查询,也可以让数据库有机会优化查询一次

它还可以比您自己更好地防止SQL注入攻击,并且最重要的是,保证遵循正确的引用规则。