提示:表“ wenzhang”中有一个名为“ title”的列,但是不能从查询的这一部分中引用它

时间:2019-06-21 09:25:38

标签: python postgresql

我正在尝试从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”的列,但无法在查询的这一部分中引用。

2 个答案:

答案 0 :(得分:0)

当前,您的value子句仅将titlecontent作为裸词,Postgres会将其解释为列名,以解释您遇到的错误。

您需要做的是使用title方法的第二个参数绑定您拥有的contentexecute变量:

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)

因此它认为titlecontent都是某个表的列。

对于pass variables to SQL queries,您可以执行以下操作:

cursor.execute("insert into wenzhang(title,conten) values(%s, %s)", (title,content))

即在您要在SQL查询中插入Python值的地方使用%s,并将Python值列表作为第二个参数传递。