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

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

處理文本文件中的單引號

處理文本文件中的單引號

心有法竹 2023-04-18 15:48:08
我有一個純文本文件,由~20-07-31-03:00~[*IF *VALUE *EQ 'DB_CONTENT'  *UNTIL]下面的腳本接收損壞的數組如下with open('''/etc/files/plaintext.txt''') as f:    resultCollect = f.read().splitlines()     resultSplit.append([line.split('~') for line in resultCollect])    insert(resultSplit[0], table)# resultSplit[0] --> ['20-07-31-03:00','[*IF *VALUE *EQ 'DB_CONTENT'  *UNTIL]']def insert(data, table):    val = [tuple(line) for line in data]    for i in range(len(val)):        cur.execute("""INSERT INTO {0} VALUES {1}""".format(table, tuple(val[i])))但是,由于 中的字符串內有單引號'DB_CONTENT',在嘗試向數據庫中插入時,會產生以下錯誤column "[*IF *VALUE *EQ 'DB_CONTENT'  *UNTIL]" does not exist生成的插入示例INSERT INTO tbl_details VALUES ('20-07-30-01:53', "[*IF *VALUE *EQ 'DB_CONTENT'  *UNTIL]")可重現的例子:result = []val = '''20-07-31-03:00~[*IF *VALUE *EQ 'DB_CONTENT'  *UNTIL]'''result.append([val.split('~')])def insert(data, table):  val = [tuple(line) for line in data]  for i in range(len(val)):    print("""INSERT INTO {0} VALUES {1}""".format(table, tuple(val[i])))insert(result[0], 'tbl_name')任何解決方案的建議?
查看完整描述

1 回答

?
慕標5832272

TA貢獻1966條經驗 獲得超4個贊

你永遠不應該自己格式化 SQL 查詢:

永遠,永遠,永遠不要使用 Python 字符串連接 (+) 或字符串參數插值 (%) 將變量傳遞給 SQL 查詢字符串。甚至沒有在槍口下。


從文檔示例中可以看出,首選方法是讓庫處理它。


SQL = "INSERT INTO authors (name) VALUES (%s);" # Note: no quotes

data = ("O'Reilly", )

cur.execute(SQL, data) # Note: no % operator

這應該可以正確處理用單引號轉義您的字符串。


編輯:在您的代碼中添加示例。上面建議的方式不應該用于插入表名(INSERT INTO %s),它應該只用于數據部分(VALUES (%s))


EDIT2:沒有注意到你想插入兩個值'20-07-30-01:53', "[*IF *VALUE *EQ 'DB_CONTENT'? *UNTIL]"。我已經編輯了代碼,請注意%s查詢字符串中的附加內容。此外,我真的看不出val[i]包含什么,但它應該是您要插入的兩個值的序列(元組、列表)。


from psycopg2.sql import SQL, Identifier



SQL_QUERY_STRING = """INSERT INTO {} VALUES (%s, %s)"""



def insert(data, table):

? ? val = [tuple(line) for line in data]

? ? for i in range(len(val)):

? ? ? ? curr.execute(

? ? ? ? ? ? SQL(SQL_QUERY_STRING).format(Identifier(table)),

? ? ? ? ? ? val[i],

? ? ? ? ? ? # second (data) argument has to be a sequene (tuple, list, ...)

? ? ? ? ? ? # of values to be inserted, even if it's just one value

? ? ? ? )


查看完整回答
反對 回復 2023-04-18
  • 1 回答
  • 0 關注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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