pymysql:TypeError:在字符串格式化过程中并非所有参数都被转换

时间:2017-02-21 17:09:23

标签: python mysql pymysql

我一直在这墙上撞了一会儿。我无法使用此插入查询。是因为我有多种数据类型(int,bool,strings,NoneType)我插入并且我使用%s?任何帮助将不胜感激。谢谢!

class DBWork(object):
    def __init__(self, attackerip=None, victimip=None, shunlen=15, shuncount=1, shunreason=None, shunepoch=None,
                 shunerrorbool=False, shunerror=None, paloaddedepoch=None, paloremovedepoch=None,
                 lastshunlen=15):
        self.Id = None
        self.attackerip = attackerip
        self.victimip = victimip
        self.shunlen = shunlen
        self.shuncount = shuncount
        self.shunreason = shunreason
        self.shunepoch = shunepoch
        self.shundatetime = 'need to build this'
        self.shunerrorbool = shunerrorbool
        self.shunerror = shunerror
        self.paloaddedepoch = paloaddedepoch
        self.paloremovedepoch = paloremovedepoch
        self.lastshunlen = lastshunlen
        self.shunlen = shunlen
        self.newshunlen = lastshunlen * shuncount

    def HistoryInsert(self):
        insert_query = (
            "INSERT INTO `autoshun`.`shunhistory` "
            "(Id, attackerip, victimip, shunlen, shuncount, shunreason, shunepoch, shundatetime, shunerrorbool, "
            "shunerror, paloaddedepoch, paloremovedepoch) "
            "VALUES "
            "(NULL, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s );"
        )
        values = [None, self.attackerip, self.victimip, self.shunlen, self.shuncount, self.shunreason, self.shunepoch,
                  self.shundatetime, self.shunerrorbool, self.shunerror, self.paloaddedepoch, self.paloremovedepoch]
        print values
        self.cur.execute(insert_query, values)

sample = DBWork(attackerip='1.1.1.15', victimip='2.2.2.2',  shunlen=15, shuncount=1, shunreason='hax', shunerrorbool=True)

sample.DBConnect()
sample.HistoryInsert()

传递的值:

values = [None, '1.1.1.15', '2.2.2.2', 15, 1, 'hax', 'NULL', 'need to build this', False, 'NULL', 'NULL', 'NULL']

错误:

Traceback (most recent call last):
  File "/home/dobbs/PycharmProjects/autoshun/sqlobjects.py", line 102, in <module>
    sample.HistoryInsert()
  File "/home/dobbs/PycharmProjects/autoshun/sqlobjects.py", line 95, in HistoryInsert
    self.cur.execute(insert_query, values)
  File "/usr/lib64/python2.7/site-packages/pymysql/cursors.py", line 164, in execute
    query = self.mogrify(query, args)
  File "/usr/lib64/python2.7/site-packages/pymysql/cursors.py", line 143, in mogrify
    query = query % self._escape_args(args, conn)
TypeError: not all arguments converted during string formatting

1 个答案:

答案 0 :(得分:1)

继续并忽略id字段。 MySQL将知道该怎么做:

    insert_query = (
        "INSERT INTO `autoshun`.`shunhistory` "
        "(attackerip, victimip, shunlen, shuncount, shunreason, shunepoch, shundatetime, shunerrorbool, "
        "shunerror, paloaddedepoch, paloremovedepoch) "
        "VALUES "
        "(%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s );"
    )

    values = [self.attackerip, self.victimip, self.shunlen, self.shuncount, self.shunreason, self.shunepoch,
              self.shundatetime, self.shunerrorbool, self.shunerror, self.paloaddedepoch, self.paloremovedepoch]

因为您的查询有一个NULL,而您尝试传递的None没有None的参数。