recherche

Maison  >  Questions et réponses  >  le corps du texte

python - pymysql TypeError: not enough arguments for format string

我在Python pymysql写入数据库时出现下面错误:

C:\Python27\python.exe E:/pythonbao/bao1/.idea/20160718.py
Traceback (most recent call last):
  File "E:/pythonbao/bao1/.idea/20160718.py", line 35, in <module>
    "%s, %s, %s, %s, %s, %s, %s)", value)
  File "C:\Python27\lib\site-packages\pymysql\cursors.py", line 159, in execute
    query = self.mogrify(query, args)
  File "C:\Python27\lib\site-packages\pymysql\cursors.py", line 138, in mogrify
    query = query % self._escape_args(args, conn)
TypeError: not enough arguments for format string

百度后把“%s”改为“%%s”没用。
下面是代码

# -*- coding: utf-8 -*-
import urllib2
import pymysql
import time
from bs4 import BeautifulSoup

today = time.strftime('%%Y-%%m-%%d',time.localtime(time.time()))

loginHeaders = {
    'Host':'www.czce.com.cn',
    'User-Agent':'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.106 Safari/537.36',
    'Referer':'http://www.czce.com.cn/portal/jysj/mrhq/A091101index_1.htm',
    'Content-Type':'text/html',
    'Connection':'keep-alive'
}
url='http://www.czce.com.cn/portal/DFSStaticFiles/Future/2016/20160804/FutureDataDailyOI.htm'
request = urllib2.Request(url, headers=loginHeaders)
opener = urllib2.build_opener()
response = opener.open(request)
content = response.read().decode('gbk').replace("</tr>","").replace("<tr>","")
soup = BeautifulSoup(content,'lxml').findAll(id="senfe")[0]
table = soup.text.split("\n")
conn = pymysql.connect(host="192.168.1.98",user="root",passwd="root",db="test",charset='utf8')
cur = conn.cursor()
value = []
for i in range(0,8):
    value.append((today,table[16+14*i],table[17+14*i],table[18+14*i],table[19+14*i],
                 table[20+14*i],table[21+14*i],table[22+14*i],table[23+14*i],
                 table[24+14*i],table[25+14*i],table[26+14*i],table[27+14*i],table[28+14*i],table[29+14*i]))
cur.execute("INSERT INTO zhujiagewang"
            "(collecttime,pinzhongyuefen,zuojiesuan,jinkaipan,zuigaojia,zuidijai,"
            "jinshoupan,jinjiesuan,zhangdie1,zhangdie2,chengjiaoliang,kongpanliang,"
            "zengjianliang,chengjiaoe,jiaogejiesuanjia) "
            "VALUES(%s,%s, %s, %s, %s, %s, %s, %s,"
            "%s, %s, %s, %s, %s, %s, %s)", value)
conn.commit()
cur.close()
conn.close()

数据库数据:

怪我咯怪我咯2804 Il y a quelques jours2742

répondre à tous(3)je répondrai

  • PHPz

    PHPz2017-04-18 09:23:14

    for i in range(0,8):
        value.extend((today,table[16+14*i],table[17+14*i],table[18+14*i],table[19+14*i],
                     table[20+14*i],table[21+14*i],table[22+14*i],table[23+14*i],
                     table[24+14*i],table[25+14*i],table[26+14*i],table[27+14*i],table[28+14*i],table[29+14*i]))
    cur.execute("INSERT INTO zhujiagewang"
                "(collecttime,pinzhongyuefen,zuojiesuan,jinkaipan,zuigaojia,zuidijai,"
                "jinshoupan,jinjiesuan,zhangdie1,zhangdie2,chengjiaoliang,kongpanliang,"
                "zengjianliang,chengjiaoe,jiaogejiesuanjia) "
                "VALUES" + 
                ','.join(["(%s)" % ','.join(['%s']*15)] * 8), value)

    répondre
    0
  • 怪我咯

    怪我咯2017-04-18 09:23:14

    À en juger par les informations sur l'exception, c'est parce qu'il y a un problème avec le formatage de la chaîne.
    En fait, ce que vous voulez faire est d'exécuter l'instruction d'insertion suivante pour chaque élément de la liste de valeurs :

    for data in value:
        cur.execute("INSERT INTO zhujiagewang"
            "(collecttime,pinzhongyuefen,zuojiesuan,jinkaipan,zuigaojia,zuidijai,"
            "jinshoupan,jinjiesuan,zhangdie1,zhangdie2,chengjiaoliang,kongpanliang,"
            "zengjianliang,chengjiaoe,jiaogejiesuanjia) "
            "VALUES(%s, %s, %s, %s, %s, %s, %s, %s,"
            "%s, %s, %s, %s, %s, %s, %s)", data)

    Ou envisagez d'insérer des données par lots comme ceci :

    insert into table1 (col1, col2) values ('val11','val21'), ('val12','val22'), ('val13','val23'), ('val14','val24');

    Il existe une méthode d'exécution correspondante.

    répondre
    0
  • 大家讲道理

    大家讲道理2017-04-18 09:23:14

    Essayez de remplacer value par value[i] et essayez d'attribuer des valeurs une par une

    répondre
    0
  • Annulerrépondre