1 回答

TA貢獻(xiàn)1817條經(jīng)驗(yàn) 獲得超6個(gè)贊
如果語(yǔ)句是 CREATE DATABASE 語(yǔ)句,則不能將值作為execute() 的第二個(gè)參數(shù)傳遞。
正如unutbu所指出的,解決此問(wèn)題的一種方法是使用psycopg2.sql子模塊并使用標(biāo)識(shí)符來(lái)構(gòu)建避免 SQL 注入的語(yǔ)句。
編碼:
import psycopg2
from psycopg2 import sql
conn = psycopg2.connect(host="...", dbname="...",
user="...", password="...", port='...')
cursor = conn.cursor()
query = ''' CREATE DATABASE {} ;'''
name = 'stackoverflow_example_db'
conn.autocommit = True
cursor.execute(sql.SQL(query).format(
sql.Identifier(name)))
cursor.close()
conn.close()
其他額外觀察:
format() 不適用于 %s,請(qǐng)改用 {}
自動(dòng)提交模式是該語(yǔ)句工作的必要條件
指定的連接用戶需要?jiǎng)?chuàng)建權(quán)限
添加回答
舉報(bào)