第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號(hào)安全,請(qǐng)及時(shí)綁定郵箱和手機(jī)立即綁定
已解決430363個(gè)問(wèn)題,去搜搜看,總會(huì)有你想問(wèn)的

如何使用 execute() 第二個(gè)參數(shù)創(chuàng)建帶有 psycopg2 的數(shù)據(jù)庫(kù)?

如何使用 execute() 第二個(gè)參數(shù)創(chuàng)建帶有 psycopg2 的數(shù)據(jù)庫(kù)?

qq_花開(kāi)花謝_0 2022-05-19 16:05:10
我正在嘗試使用用戶將提供的名稱(chēng)創(chuàng)建數(shù)據(jù)庫(kù)。據(jù)我所知,正確的方法是使用execute()的第二個(gè)參數(shù)。所以我做了如下:import psycopg2conn = psycopg2.connect(host="...", dbname="...",                        user="...", password="...", port='...')cursor = conn.cursor()query = ''' CREATE DATABASE %s ;'''name = 'stackoverflow_example_db'conn.autocommit = Truecursor.execute(query, (name,))cursor.close()conn.close()我得到了這個(gè)錯(cuò)誤:psycopg2.errors.SyntaxError: syntax error at or near "'stackoverflow_example_db'"LINE 1:  CREATE DATABASE 'stackoverflow_example_db' ;我需要執(zhí)行此語(yǔ)句以避免 SQL 注入,因此必須使用第二個(gè)參數(shù)。
查看完整描述

1 回答

?
慕的地6264312

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)限



查看完整回答
反對(duì) 回復(fù) 2022-05-19
  • 1 回答
  • 0 關(guān)注
  • 154 瀏覽
慕課專(zhuān)欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購(gòu)課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動(dòng)學(xué)習(xí)伙伴

公眾號(hào)

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號(hào)