2017-10-06 110 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