我正在尝试使用以下代码使用MySQLdb库为SQL安全插入格式化多个%s:
v = ['profileIconId', 'summonerLevel', 'revisionDate', 'id', 'name']
v += summonerId.values()
vs = ','.join(['%s'] * len(v))
con = connect(MYSQL['HOST'], MYSQL['USER'], MYSQL['PASSWORD'], MYSQL['DB'])
with con:
cur = con.cursor()
q = 'INSERT IGNORE INTO '
q += 'summoners(%s) '
q += 'VALUES(%s)'
print vs,v
cur.execute(q % vs, v )
我收到以下输出:
%s,%s,%s,%s,%s,%s,%s,%s,%s,%s ['profileIconId','summonerLevel','revisionDate','id','name', 627,30,1398707724000,60783,u'TheOddOne']
TypeError:格式字符串的参数不足
如何使用两个%s获取SQL安全的转义字符串?我也希望有更好的方法来做到这一点。
最佳答案
由于需要动态插入列名,因此适合您的解决方案-将参数化查询与MySQLdb.escape_string
结合使用:
q = "INSERT IGNORE INTO summoners({0},{1},{2},{3},{4}) VALUES (%s,%s,%s,%s,%s)".format(*c)
query = MySQLdb.escape_string(q)
cursor.execute(query, v)