【发布时间】:2019-09-03 17:05:47
【问题描述】:
我正在尝试使用用户提供的名称创建数据库。据我所知正确的方法是使用execute()的第二个参数。
所以我做了如下:
import psycopg2
conn = psycopg2.connect(host="...", dbname="...",
user="...", password="...", port='...')
cursor = conn.cursor()
query = ''' CREATE DATABASE %s ;'''
name = 'stackoverflow_example_db'
conn.autocommit = True
cursor.execute(query, (name,))
cursor.close()
conn.close()
我得到了这个错误:
psycopg2.errors.SyntaxError: syntax error at or near "'stackoverflow_example_db'"
LINE 1: CREATE DATABASE 'stackoverflow_example_db' ;
我需要做这个语句避免SQL注入,所以使用第二个参数是必须的。
【问题讨论】:
-
为什么要让用户创建数据库?
-
@dfundako 它适用于具有管理权限的用户,他们不需要了解 SQL 即可使用应用程序。
-
相关:Passing table name as a parameter in psycopg2。尽管讨论是关于表的,但对于数据库名称,答案基本上是相同的。具体参见this answer,它使用pyscopg2.sql.SQL 和Identifiers 动态构建SQL。