我是 sql 煉金術的新手。我有一個 postgres 本地服務器,我想使用 sql alchemy 創建一個數據庫。我有以下代碼:connection = engine.connect()connection.execute( text("CREATE DATABASE :database_name").bindparams(bindparam('database_name', quote=False)), database_name="test_db")但不幸的是,這對數據庫名稱參數進行了單引號,這在 postgres 中不起作用。來自 sql alchemy 的日志:[SQL: CREATE DATABASE %(database_name)s][parameters: {'database_name': 'test_db'}]sqlalchemy.exc.ProgrammingError: (psycopg2.errors.SyntaxError) syntax error at or near "'test_db'" LINE 1: CREATE DATABASE 'test_db`'在 postgres 日志中,它執行以下語句,由于單引號,該語句無效。一個有效的應該有雙引號:CREATE DATABASE 'test_db'有沒有辦法在結果語句中不引用綁定參數?我不想自己進行參數引用和字符串創建,因為我認為這種抽象應該由 sql alchemy 處理 - 以防我更改我的底層數據庫引擎,例如,這看起來是 sql alchemy 促進避免 sql 的機制也注射。同樣的問題也適用于其他 postgres 語句,例如使用密碼創建用戶或授予現有用戶權限,所有這些都需要引用 postgres 特定的引用。
1 回答

汪汪一只貓
TA貢獻1898條經驗 獲得超8個贊
除了、或之外SELECT,您不能在語句中使用參數。INSERTUPDATEDELETE
您必須將CREATE DATABASE語句構造為包含數據庫名稱的字符串。就像是
from psycopg2 import sql
cursor.execute(
sql.SQL("CREATE DATABASE {}").format(sql.Identifier('test_db'))
)
添加回答
舉報
0/150
提交
取消