将字符串与包含变量的另一个字符串连接起来

时间:2014-12-04 11:00:43

标签: python mysql

我在Python中使用MySQLdb进行MySQL查询,我想根据是否提供LIMIT来给我一个不同的行数。

所以,比如:

sql = "SELECT URL, Name AS Category 
       FROM sitelist sl 
       INNER JOIN sitecategory sc ON sc.PlacementCategory_id = sl.Category_id "
if limit > 0 :
    sql += "LIMIT %s", (limit)

然而,这失败了:

TypeError: cannot concatenate 'str' and 'tuple' objects

如何在保持查询“安全”的同时连接包含limit数字的字符串?如果以上是单个字符串,则上述工作正常

在PHP中,我只是使用带有bindparam()的准备好的PDO语句,但我在Python中找不到类似的东西。

2 个答案:

答案 0 :(得分:1)

我认为最好的方法是:

sql = ("SELECT URL, Name AS Category "
       "FROM sitelist sl "
       "INNER JOIN sitecategory sc ON sc.PlacementCategory_id = sl.Category_id")

if limit > 0:
    whatever.execute(sql+" LIMIT %s", (limit,))
else:
    whatever.execute(sql)

请注意:sql应该在每一行都有开始和结束引号;并且limit需要在元组中作为execute的参数。

答案 1 :(得分:-1)

使用string格式。

sql = "SELECT URL, Name AS Category\n\
   FROM sitelist sl\n\
   INNER JOIN sitecategory sc ON sc.PlacementCategory_id = sl.Category_id "
if limit > 0: # you don't need parenthesis in python
    sql += "LIMIT {}" .format(limit)

或使用format specifier

sql = "SELECT URL, Name AS Category\n\
       FROM sitelist sl\n\
       INNER JOIN sitecategory sc ON sc.PlacementCategory_id = sl.Category_id "
if(limit > 0):
    sql += "LIMIT %d" %limit