2017-10-06 113 views
0

我已經得到了以下的一段Python代碼:百分號(%)在Python字符串沒有%%

statement = statement + " OR (TIMESTAMPDIFF(MINUTE, (str_to_date((SELECT tijd FROM Metingen WHERE SensorID='" + sensor_id + "' ORDER BY MetingID DESC LIMIT 1), '%%d-%%m-%%Y %%H:%%i')), NOW()) >= " + waarde + " AND MetingID=(SELECT metingID FROM Metingen WHERE SensorID='" + sensor_id + "' ORDER BY metingID DESC LIMIT 1)" 

我試圖使用MySQL的STR_TO_DATE功能,但爲此我需要使用正在Python中生成的MySQL查詢中的百分號。我知道使用%%應該可以解決這個問題,但是當我這樣做時,兩個百分號都會打印到查詢中,並且查詢不起作用。

+2

***請勿使用此代碼,生產***很容易受到SQL注入! –

+0

該代碼只會在我們自己的系統上運行,除了我們之外,沒有人會獲得該程序或訪問它,所以我假裝它是安全的? – Rick

+0

在Python中,你不應該創建一個像這樣的字符串,使用'格式' – FeedTheWeb

回答

0

當我的代碼中有硬編碼的SQL查詢時,我喜歡把它們放在一個多行字符串中。 (見串documentation

QUERY = """ 
{prefix} 
OR (
    TIMESTAMPDIFF(MINUTE, 
    (str_to_date((
     SELECT tijd 
     FROM Metingen 
     WHERE SensorID='{sensor_id}' 
     ORDER BY MetingID DESC LIMIT 1), 
    '%d-%m-%Y %H:%i')), 
    NOW()) >= {waarde} 
AND 
    MetingID=(
     SELECT metingID 
     FROM Metingen 
     WHERE SensorID='{sensor_id}' 
     ORDER BY metingID DESC LIMIT 1) 
""".strip() 

statement = QUERY.format(
    prefix=statement, 
    sensor_id=sensor_id, 
    waarde=waarde) 
+0

'ORDER BY metingID DESC LIMIT 1'後面沒有支架,但是有一個加入了這個功能。謝謝! – Rick