我是一名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
感谢您的帮助。
答案 0 :(得分:2)
您没有正确引用查询。不要在此处使用字符串连接,而是使用SQL parameters:
cur.execute('SELECT * from jivemessage WHERE body LIKE %s', ("%{}%".format(i),))
这里,%s
占位符向数据库驱动程序发出信号,询问第二个参数的第一个值应该放在那里。
这样就可以将插值留给数据库驱动程序,即使您要重复使用相同的查询,也可以让数据库有机会优化查询一次。
它还可以比您自己更好地防止SQL注入攻击,并且最重要的是,保证遵循正确的引用规则。