【问题标题】:mysql.connector.errors.ProgrammingError: Wrong number of arguments during string formattingmysql.connector.errors.ProgrammingError:字符串格式化期间的参数数量错误
【发布时间】:2015-01-19 01:47:56
【问题描述】:

我正在打开一个文本文件并尝试将其写入 SQL 数据库。

import mysql.connector
import sys
import mysql

f = open('norepeats.txt', 'r')

def sniffertodatabase(f):
for line in f:
    linestrip = line.strip()
    IP = linestrip
    cnx = mysql.connector.connect(user='', password='', host='localhost', database='snifferdb')
    cur = cnx.cursor()
    #print IP
    insert_stmt = (
    "INSERT INTO SNIFFERDBIPs (IP)"
    "VALUES (%s)"
    )
    data = ('IP')
    cur.execute(insert_stmt, data)

    #cur.execute("INSERT INTO SNIFFERDBIPs (IP)" "VALUES (%s), (IP)")
    #cur.execute("INSERT INTO test (num, data) VALUES (%s, %s)", (42, 'bar'))
    cnx.commit()
    cnx.close()
sniffertodatabase(f)

我得到的错误是:

Traceback (most recent call last):
File "snifferdatabase.py", line 26, in <module>
  sniffertodatabase(f)
File "snifferdatabase.py", line 19, in sniffertodatabase
  cur.execute(insert_stmt, data)
File "build/bdist.linux-x86_64/egg/mysql/connector/cursor.py", line 480, in execute
mysql.connector.errors.ProgrammingError: Wrong number of arguments during string formatting 

我该如何解决这个错误?

【问题讨论】:

  • 你的data应该是('IP',);现在是 str,但你需要 tuple
  • 我没有作为答案发布,所以没关系;顺便说一句,你正在为文件中的每一行创建和关闭一个连接,你应该只做一次,这样会更好

标签: python mysql mysql-connector


【解决方案1】:

你有data=('IP')。即使您将它放在括号中,它也不会被视为元组。看到这个:

>>> type(('IP'))
<type 'str'>
>>> type(('IP',))
<type 'tuple'>
>>>

所以您需要将您的data=('IP') 更改为data=('IP',)

【讨论】:

    【解决方案2】:

    你也可以使用列表而不是元组,你可以这样做

    data = ['IP']
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2016-11-04
      • 2010-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-16
      相关资源
      最近更新 更多