Вставка данных python массивов в mysql - PullRequest
0 голосов
/ 29 апреля 2020

У меня есть три массива, такие как следующие

c = [['1X2', '1', '1.52', 'X', '3.95', '2', '5.40'], [ «Двойной шанс», «1X», «1.08», «12», «1.16», «X2», «2.19»], [«O / U 2.5», «Over», «1.36», «Under», '2.82']] Я пытался вставить это в mysql таблицу со следующим кодом

conn = pymysql.connect(host='127.0.0.1',user='root', passwd = 'root', db = 'my_db',
charset = 'utf8')
cur = conn.cursor()

cur.executemany('INSERT IGNORE INTO scrapy (heading,value1,value2,value3,value4,value5,value6) VALUES' '("%s","%s","%s","%s","%s","%s","%s")',c)
cur.connection.commit()

Ошибка в этом

C:\Users\SATYA\AppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\cursors.py:170: Warning: (1265, "Data truncated for column 'heading' at row 1")
  result = self._query(query)
Traceback (most recent call last):
  File "dynamicscrape.py", line 37, in <module>
    cur.executemany('INSERT IGNORE INTO scrapy (heading,value1,value2,value3,value4,value5,value6) VALUES' '("%s","%s","%s","%s","%s","%s","%s")',c)
  File "C:\Users\SATYA\AppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\cursors.py", line 199, in executemany
    self.rowcount = sum(self.execute(query, arg) for arg in args)
  File "C:\Users\SATYA\AppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\cursors.py", line 199, in <genexpr>
    self.rowcount = sum(self.execute(query, arg) for arg in args)
  File "C:\Users\SATYA\AppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\cursors.py", line 168, in execute
    query = self.mogrify(query, args)
  File "C:\Users\SATYA\AppData\Local\Programs\Python\Python37\lib\site-packages\pymysql\cursors.py", line 147, in mogrify
    query = query % self._escape_args(args, conn)
TypeError: not enough arguments for format string

Может кто-нибудь помочь мне с этим ??

это ожидаемая выходная ссылка https://pastebin.com/66v73qd8

1 Ответ

0 голосов
/ 29 апреля 2020

Здесь я хочу отметить три вещи:

  1. Значения, которые необходимо вставить, должны быть в формате python tuple .
  2. Если вы хотите вставить много значений вместе, вы можете использовать команду execute many со списком (итеративный объект) кортежей в виде args.

Это означает, что вы можете изменить ваш c как показано ниже.

c=[('1X2', '1', '1.52', 'X', '3.95', '2', '5.40'), ('Double Chance', '1X', '1.08', '12', '1.16', 'X2', '2.19'), ('O/U 2.5', 'Over', '1.36', 'Under', '2.82')] 
Если размер кортежа изменяется, предполагая, что ваши столбцы в таблице MySQL принимают значения None, вы можете отформатировать свой кортеж, чтобы он соответствовал длине, вставив значения None, как показано ниже. Вы должны позаботиться о заказе.

('O/U 2.5', 'Over', '1.36', 'Under', '2.82',None,None)

...