【问题标题】:How do you format multiple strings (%s) using MySQLdb?如何使用 MySQLdb 格式化多个字符串 (%s)?
【发布时间】:2014-04-29 01:22:48
【问题描述】:

我正在尝试使用 MySQLdb 库将多个 %s 格式化为使用此代码进行 SQL 安全插入:

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', '姓名', 627, 30, 1398707724000, 60783, u'TheOddOne']

TypeError: 格式字符串的参数不足

如何使用两个 %s 获得 SQL 安全的转义字符串?我也愿意寻求更好的方法来做到这一点。

【问题讨论】:

  • 参数化查询不能替代元数据。
  • 高效地将两个列表转义到 MySQLdb 执行命令中的最佳方法是什么?

标签: python mysql mysql-python


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-24
    • 2017-05-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-17
    • 2017-11-30
    • 1970-01-01
    相关资源
    最近更新 更多