在python变量

时间:2015-10-08 07:04:46

标签: python sql postgresql

以下是我正在使用的代码:

import urllib2
import psycopg2

add = 'http://google.com'
res = urllib2.urlopen(add)
url_html = res.read()
con = psycopg2.connect(user='postgres',password='test_pwd',host='localhost',port=5432,database='test_db')
cur = con.cursor()
cur.execute("INSERT INTO output(output) values ('%r')" %(url_html))
#cur.execute("INSERT INTO output(output) values ('''%s''')" %(url_html))
con.commit()

现在它因为''作为引号而引发错误也在页面的源代码中。 任何人都可以帮我解决这个问题。 谢谢你的帮助。

1 个答案:

答案 0 :(得分:1)

即使您只是从网页下载HTML,或者您自己也容易受到SQL注入攻击,您应该总是逃避数据库输入。如果有人在HTML中放入drop table命令怎么办?你最终可能会执行它。此外,在您的情况下,转义实际上将解决您的问题。

psycopg2中你可以转义这样的参数:

cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (100, "abc'def")) (从http://initd.org/psycopg/docs/usage.html无耻地偷走)

阅读有关SQL注入的更多信息:What is SQL injection?