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