簡體   English   中英

無法使用 psycopg2 python 庫插入 PostgreSQL

[英]Unable to INSERT into PostgreSQL with psycopg2 python library

我是專門使用 SQL 和 Postgres 的新手,我正在嘗試編寫一個簡單的程序,將課程 ID 和一些 URL 存儲在一個包含兩列的 SQL 表中。 我正在使用 psycopg2 python 庫。

我可以使用以下方法從表中讀取:

def get_course_urls(course):
    con = open_db_connection()
    cur = con.cursor()
    query = f"SELECT urls FROM courses WHERE course = '{course}'"
    cur.execute(query)
    rows = cur.fetchall()
    cur.close()
    close_db_connection(con)
    urls = []
    for url in rows:
        urls.extend(url[0])
    return urls

但是,我無法使用以下方法插入表中:

def format_urls_string(urls):
    return '{"' + '","'.join(urls) + '"}'


def add_course_urls(course, urls):
    con = open_db_connection()
    cur = con.cursor()
    query = f"INSERT INTO courses (course, urls) VALUES ('{course}', '{format_urls_string(urls)}');"
    print(query)
    cur.execute(query)
    cur.close()
    close_db_connection(con)

add_course_urls("CS136", ["http://google.com", "http://wikipedia.com"])

我認為我的查詢沒有任何問題,因為當我在 SQL Shell 中運行相同的查詢時,它可以按我的意願工作。

這就是列的樣子。

列上的鎖表示列是只讀的,但是,我可以通過 shell 插入。 我覺得這是一個非常小的修復,但由於我是 PostgreSQL 的新手,我遇到了一些麻煩。

感謝您的幫助!

這是自己進行替換的危險,而不是讓 db 連接器來做。 你看看你的字符串,是嗎? 你在寫

... VALUES ('CS136', '['http://google.com','http://wikipedia.com']')

這顯然是錯誤的語法。 它需要是

... VALUES ('CS136', '{"http://google.com","http://wikipedia.com"}')

Python 的格式化程序不會生成。 因此,您可以手動格式化插入字符串,也可以放置占位符並將參數傳遞給cursor.execute調用:

    query = "INSERT INTO courses (course, urls) VALUES (%s,%s);"
    cur.execute( query, (course, urls) )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM