这就是我所拥有的:
db_name = 'temp_test_database'
conn.set_isolation_level(0)
cursor.execute('DROP DATABASE IF EXISTS {}'.format(db_name))
此功能有效并符合我的预期,但违反了传递rule的参数。
我查看了SQL string composition documentation,但这不适用于数据库名称。它用“Identifier()”包装它,它会破坏。
是否有“干净”的方法在psycopg2执行调用中动态设置数据库?
答案 0 :(得分:0)
使用psycopg2.sql.Identifier
并像这样编写SQL语句:
from from psycopg2 import sql
cursor.execute(sql.SQL("drop database if exists {}")
.format(sql.Identifier(db_name)))
整个链接的文档页面值得一读。
答案 1 :(得分:0)
诀窍是使用as_string()
,将光标用作上下文。参见docs about this method。
这里有一个完整的工作片段:
import psycopg2
from psycopg2 import sql
conn = psycopg2.connect(dbname="postgres")
conn.set_isolation_level(0)
cursor = conn.cursor()
db_name = sql.Identifier("temp_test_database").as_string(cursor)
cursor.execute('DROP DATABASE IF EXISTS {}'.format(db_name))
...