亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

psycopg2 沒有從元組參數中轉義引號?使用 sql.SQL 格式化參數

psycopg2 沒有從元組參數中轉義引號?使用 sql.SQL 格式化參數

蝴蝶不菲 2022-10-25 16:05:32
我正在嘗試使用 psycopg2 在 postgres 中動態創建一個表。似乎在傳遞參數時, pyscopg2 并沒有轉義引號并理解我的查詢。代碼如下所示:input_string_tup = ('col1 int', 'col2 varchar(2)', ...)create_table_str = sql.SQL("CREATE TABLE {} ({data})").format(sql.SQL(table_name),data=sql.SQL(", ").join(sql.Composed(sql.Identifier(i) for i in input_string_tup)))execute_batch(cur, create_table_str, [input_string_tup])我得到的錯誤:psycopg2.errors.SyntaxError: syntax error at end of input LINE 1: ...", "shape_area numeric(8, 6)", "shape_length numeric(8, 6)")                                                         ^什么 print(create_table_str.as_string(conn)) 輸出:CREATE TABLE my_table ("col1 int", "col2 varchar(2)", "col3 int", ... )編輯以顯示修改后的答案,無需字符串連接input_string_tup = (('col1', 'int'), ('col2, varchar(2)'), ...)create_table_str = sql.SQL("CREATE TABLE {} ({data})").format(sql.SQL(table_name),data=sql.SQL(", ").join(sql.Composed([sql.Identifier(i[0]), sql.SQL(' '), sql.SQL(i[1])])  for i in input_string_tup))感謝阿德里安的幫助
查看完整描述

1 回答

?
陪伴而非守候

TA貢獻1757條經驗 獲得超8個贊

sql.Identifier 僅適用于 SQL 對象,例如表/列名而不是類型: https ://www.postgresql.org/docs/current/sql-syntax-lexical.html#SQL-SYNTAX-IDENTIFIERS


嘗試:


input_string_tup = (('col1', 'int'), ('col2', 'varchar(2)')) 


table_name = 'test_table' 


create_table_str = sql.SQL("CREATE TABLE {} ({data})").format( 

sql.SQL(table_name), 

data=sql.SQL(", ").join(sql.Composed(sql.Identifier(i[0]) + sql.SQL(' ' + i[1])  for i in input_string_tup)))   


print(create_table_str.as_string(con))                                                                                                                                    

CREATE TABLE test_table ("col1" int, "col2" varchar(2))


cur.execute(create_table_str) 


查看完整回答
反對 回復 2022-10-25
  • 1 回答
  • 0 關注
  • 170 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號