我自己创建了一个小项目:
用户在网站上输入一些评论,然后使用flask+python我们获取这些文本,在变压器和所有结果的帮助下将其发送到情感分析(文本,标签,分数)插入
Postgresql
这个项目分为两个主要部分,首先我在数据库中创建了空表:
CREATE TABLE Message_sentiment (
mytext text,
text_label text,
score numeric
);
基于第二部分,这是我的小代码:
if request.method=='POST':
text =request.form.get('user_comment')
label =model(text)[0]['label']
score =model(text)[0]['score']
# print(f'{text} has following label {label} with score {score}')
curr.execute("""INSERT INTO message_sentiment(mytext,text_label,score) VALUES
(text,label, score)
""")
当我运行此代码时,得到以下内容错误:
UndefinedColumn
psycopg2.errors.UndefinedColumn: column "text" does not exist
LINE 2: (text,label, score)
^
HINT: Perhaps you meant to reference the column "message_sentiment.mytext".
所以我认为问题出在这里:
curr.execute("""INSERT INTO message_sentiment(mytext,text_label,score) VALUES
(text,label, score)
""")
我不能使用 {} 括号,请帮助我如何修改这一行?提前致谢
问题在于你的 SQL 语句中,你把变量名当作了字符串。你需要使用占位符,然后将变量值传递给
execute
方法。
修改后的代码如下:
if request.method == 'POST':
text = request.form.get('user_comment')
label = model(text)[0]['label']
score = model(text)[0]['score']
# print(f'{text} has following label {label} with score {score}')
curr.execute(
"""INSERT INTO message_sentiment (mytext, text_label, score) VALUES (%s, %s, %s)""",
(text, label, score),
)
解释:
-
占位符:
在 SQL 语句中,我们使用
%s
作为占位符,表示这里需要插入一个值。 -
传递变量:
在
execute
方法中,第二个参数是一个元组,包含了要插入的值,按照占位符的顺序对应。
这样,psycopg2 就会将变量的值安全地插入到 SQL 语句中,避免了将变量名误认为是字符串的问题。
标签:python,sql,postgresql,psycopg2 From: 78802634