我在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中找不到类似的东西。
答案 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