1. 程式人生 > 程式設計 >解決python 執行sql語句時所傳引數含有單引號的問題

解決python 執行sql語句時所傳引數含有單引號的問題

在編寫自己的程式時,需要實現將資料匯入資料庫,並且是帶引數的傳遞。

執行語句如下:

sql_str = "INSERT INTO teacher(t_name,t_info,t_phone,t_email) VALUES\
(\'%s\',\'%s\',\'%s\')" % (result,result2,phoneNumber,Email)

cur.execute(sql_str) 

執行程式後,產生錯誤:

ProgrammingError: (1064,"You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '07、PRICAI'08、ACML'09 程式委員會主席/共同主席,多次擔任 ACM K' at line 1")

發現是因為result2引數為一個字串,而字串中出現了單引號 ',mysql語句受到影響報錯。

原本認為這個問題應該會是有標準解決方案,可是網上查詢了一下,遇到這個問題的人不少,但沒有很好的方法解決。

於是考慮了一下,可以讓sql語句在讀取到單引號時,知道這是字串文字的單引號,所以可以將引數中單引號替換為 \' ,這樣或許可以順利語句如下:

result2 = result2.replace("'","\\'") #將result2中的 ' 替換為 \'

PS: 這裡請務必看清雙引號以及反斜槓的使用:)

經過測試,問題得到了順利解決。

補充知識:python動態生成變數及sql語句與DF錶轉化

先說效果:

解決python 執行sql語句時所傳引數含有單引號的問題

如圖,本來是這樣的一個DF表,表示各欄位限制條件(A、B、C、D均為欄位名)

解決python 執行sql語句時所傳引數含有單引號的問題

通過下面步驟轉化為一條sql語句,當然也做了反向操作

for i in range(3):
locals()['f'+str(i)]=[]

import pandas as pd
import numpy as np
a = pd.DataFrame({"A":[">=",5],"B":["<",6],"C":["in",'("ha","he")'],"D":["like","*q*"]
     })
print(a)
b = []
for i in a.columns:
 b.append(str(i)+" "+str(a[i][0])+" "+str(a[i][1]).strip())
c = " and ".join(b)
 #b = b+str(i)+" "+str(a[i][0])+" "+str(a[i][1])+" "+"and"+" "
#print(c)

d = c.split(" and ")
for i in range(3):
 locals()['f'+str(i)]=[]
 for j in (range(len(d))):
  f = d[j].split(" ")
  locals()['f' + str(i)].append(f[i])

print(f0,f1,f2)
g = pd.DataFrame(columns=f0,data=[f1,f2])
print(g)

以上這篇解決python 執行sql語句時所傳引數含有單引號的問題就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支援我們。