我正在尝试从spyder插入内容。我已成功连接到数据库。然后发生了错误。
connet = psycopg2.connect(database="sample",
user="users",password="123456",host="localhost",port="5432")
cursor = connet.cursor()
def downloadPage(url):
content=''
response = requests.get(url)
response.encoding = 'UTF-8'
bs = BeautifulSoup(response.text,'lxml')
title = bs.find('h1').text
div = bs.find('div',attrs={'class':'neirong'})
ps = div.findAll('p')
for p in ps:
content+=p.text+'\n'
return title,content
for url in urls:
title,content = downloadPage(url)
print(title)
sql = "insert into wenzhang(title,conten) values(title,content)";
cursor.execute(sql)
错误:
psycopg2.errors.UndefinedColumn: column "title" does not exist
LINE 1: insert into wenzhang(title,conten) values(title,content)
^
提示:表“ wenzhang”中有一个名为“ title”的列,但无法在查询的这一部分中引用。
答案 0 :(得分:0)
当前,您的value子句仅将title
和content
作为裸词,Postgres会将其解释为列名,以解释您遇到的错误。
您需要做的是使用title
方法的第二个参数绑定您拥有的content
和execute
变量:
sql = "insert into wenzhang (title, conten) values (%s, %s)";
cursor.execute(sql, (title, content))
答案 1 :(得分:0)
问题在于数据库对Python程序及其变量一无所知。您是在告诉它运行代码
insert into wenzhang(title,conten) values(title,content)
因此它认为title
和content
都是某个表的列。
对于pass variables to SQL queries,您可以执行以下操作:
cursor.execute("insert into wenzhang(title,conten) values(%s, %s)", (title,content))
即在您要在SQL查询中插入Python值的地方使用%s
,并将Python值列表作为第二个参数传递。