[英]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.