【问题标题】:psycopg2 takes a value as a columnpsycopg2 将值作为列
【发布时间】:2021-08-09 21:18:21
【问题描述】:

我正在尝试使用 psycopg2 创建一个表,然后从一些 json 中插入外部数据。为此,我定义了 2 个函数:create_words_table() 和 insert_data():

con = psycopg2.connect(
    database="dbname",
    user="username",
    password="password",
    host="127.0.0.1",
    port="5432"
)

cur = con.cursor()


def create_words_table():

    cur.execute(""" CREATE TABLE WORDS 
        (word_ CHAR(50),
        POS_ CHAR(20),
        case_ CHAR(20),
        animacy_ CHAR(20),
        tense_ CHAR(20),
        person_ CHAR(20),
        number_ CHAR(20),
        gender_ CHAR(20),
        mood_ CHAR(20),
        tonality_ CHAR(20),
        POS_score_ REAL NOT NULL,
        NEU_score_ REAL NOT NULL,
        NEG_score_ REAL NOT NULL );""")

def insert_data(word):

    # handle_dict() is a function for getting outer data.

    if handle_dict(word) is not None:
        (word_from_dict, pos_from_dict, case_from_dict, gender_from_dict,
         mood_from_dict, number_from_dict, person_from_dict, tense_from_dict,
         tonality_from_dict, pos_score_from_dict, neu_score_from_dict,
         neg_score_from_dict) = handle_dict(word)

        cur.execute('''INSERT INTO WORDS (word_, POS_, case_, gender_, mood_, 
        number_, person_, tense_, tonality_, pos_score_, neu_score_, neg_score_)       
        VALUES (word_from_dict, pos_from_dict, case_from_dict, gender_from_dict, 
        mood_from_dict, number_from_dict, person_from_dict, tense_from_dict, 
        tonality_from_dict, pos_score_from_dict, neu_score_from_dict, 
        neg_score_from_dict)''')

        con.commit()
        con.close()

所以,尝试执行它们:

if __name__ == '__main__':
    create_words_table()
    logger.info("table created")
    insert_data()
    logger.info("Records inserted successfully")
    

我得到了进一步的错误:

Traceback (most recent call last):
  File "path\to\file", line 178, in <module>
    main()
  File "path\to\file", line 172, in main
    insert_data()
  File "path\to\file", line 148, in insert_data
    cur.execute('''
psycopg2.errors.UndefinedColumn: ОШИБКА:  столбец "word_from_dict" не существует 
                               # ERROR: column "word_from_dict" does not exist ###
LINE 4:         VALUES (word_from_dict, pos_from_dict, case_from_dic...

查看文档,我没有看到应用简单 INSERT 查询有任何错误,也无法理解为什么 psycopg2 将单词 VALUE 之后的元组作为表的字段。 如果有人能帮我解决这个问题,我将不胜感激。

【问题讨论】:

    标签: python sql postgresql psycopg2


    【解决方案1】:

    问题出在您的查询中,您需要将查询更改为此并将元组作为参数传递:

    cur.execute('''INSERT INTO WORDS (word_, POS_, case_, gender_, mood_, 
            number_, person_, tense_, tonality_, pos_score_, neu_score_, neg_score_) 
       VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)''',handle_dict(word))
    

    【讨论】:

    • 非常感谢!真的,它需要2个参数。稍微澄清一下:&lt;...&gt;, handle_dict(word)
    猜你喜欢
    • 2021-02-03
    • 1970-01-01
    • 1970-01-01
    • 2015-02-02
    • 1970-01-01
    • 1970-01-01
    • 2022-01-06
    • 2012-11-27
    相关资源
    最近更新 更多