簡體   English   中英

Postgres psycopg2 創建用戶

[英]Postgres psycopg2 create user

要通過 psycopg2 創建用戶,我使用以下代碼:

        cur=conn.cursor()
    cur.execute("create user %s with password %s",('abcdefgh','0h/9warrAttrgd8EF0gkvQ==',))

這給出了以下錯誤:

syntax error at or near "'abcdefgh'" LINE 1: create user 'abcdefgh' with password '0h/9warrAttrgd8EF0gkvQ.

似乎 %s 在用戶名周圍加上引號,postgres 在創建用戶時不喜歡它。 以下代碼工作正常:

        cur.execute("create user abcdefgh with password %s",('0h/9warrAttrgd8EF0gkvQ==',))

有什么解決方法嗎?

現有的答案實際上都沒有使用安全的方法來做到這一點。 但是,從 Psycopg 2.7 版開始,有一個更好的方法。

關於使用%s作為標識符(表名、用戶名等)的文檔是怎么說的:

只應通過此方法綁定查詢值:它不應用於將表名或字段名合並到查詢中(Psycopg 將嘗試將表名引用為字符串值,從而生成無效的 SQL)。 如果您需要動態生成 SQL 查詢(例如動態選擇表名),您可以使用 psycopg2.sql 模塊提供的工具

使用這個模塊,上面的查詢可以更好地表述為:

from psycopg2 import sql

query = sql.SQL("CREATE USER {username} WITH PASSWORD {password}").format(
    username=sql.Identifier('abcdefgh'),
    password=sql.Placeholder()
)
cur.execute(query, ('0h/9warrAttrgd8EF0gkvQ==',))

使用https://www.psycopg.org/docs/usage.html#passing-parameters-to-sql-queries

使用psycopg2.extensions.AsIs(object):

from psycopg2.extensions import AsIs

cur.execute("create user %s with password %s", (AsIs('abcdefgh'), '0h/9warrAttrgd8EF0gkvQ==',))

暫無
暫無

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

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