如何使用MySQLdb格式化多个字符串(%s)?

时间:2014-04-29 01:22:49

标签: python mysql mysql-python

我正在尝试使用此代码使用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安全转义字符串?我也愿意接受更好的方法。

1 个答案:

答案 0 :(得分:0)

由于您需要动态插入列名称,为您提供适当的解决方案 - 将参数化查询与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)