簡體   English   中英

動態SQL查詢Psycopg2值問題

[英]Dynamic SQL query Psycopg2 values problem

使用Python和psycopg2我試圖構建一個動態SQL查詢來將行插入表中。

變量包括:1。 表名 2. 列名的 變量列表 3. 變量值列表,理想情況下在一個語句中輸入多行

我遇到的問題是從Python到SQL和psycopg2處理字符串文字,試圖避免將代碼暴露給SQL注入攻擊。

使用psycopg2中的SQL模塊,我已經解決了動態添加表名和列列表的問題。 但是我真的在努力添加VALUES。 首先,將值作為%(val)s放入查詢中,並且似乎像這樣傳遞給數據庫,從而導致錯誤。

其次,我希望能夠一次添加多行。

代碼如下。 所有幫助非常感謝:)

   import psycopg2 as pg2
   from psycopg2 import sql
   conn = pg2.connect(database='my_dbo',user='***',password='***')

   cols = ['Col1','Col2','Col3']
   vals = ['val1','val2','val3']

   #Build query
   q2 = sql.SQL("insert into my_table ({}) values ({})") \
   .format(sql.SQL(',').join(map(sql.Identifier, cols)), \
   sql.SQL(',').join(map(sql.Placeholder,vals)))

當我打印此字符串作為print(q2.as_string(conn))時,我得到:

插入my_table(“Col1”,“Col2”,“Col3”)值%(val1)s,%(val2)s,%(val3)s

然后當我嘗試執行這樣的字符串時,我得到以下錯誤:

ProgrammingError:語法錯誤處於或接近“%”LINE 1:...(“Col1”,“Col2”,“Col3”)值(%(val1)s ...
^

好的我解決了這個問題 首先使用Literal而不是Placeholder,然后將行值作為元組放在一個元組中,循環將每個元組作為文字添加到列表中,然后在構建查詢時最后插入。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM