Вставка списка Python в Python в таблицу SQL - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть код, который читает из сокета и создает список с именем i.Сокет читается, список создается из сокета, список распечатывается и удаляется.Это повторяется во время истинного цикла.Вместо того, чтобы просто распечатывать список, я хотел бы вставить его в таблицу в моей БД.У меня уже есть курсор и соединение, установленное в коде.Я возился с некоторыми другими вещами, но продолжаю получать ошибки.Я хотел бы использовать REPLACE INTO вместо INSERT INTO.Огромное спасибо за помощь.

Это пример того, как будет выглядеть список.'Декабрь-11-2018', '12:28:43', 'iPhone', 'Альфа', 'Пб', 'Пб', '(45.67.67) \ п']

Моя таблица называется StudentPrototype и имеет 7 столбцов. Столбцы - (Дата, Время, Устройство, ID, AP, APGroup, MACAdd)

#!/bin/python

import socket
import os, os.path
import MySQLdb as mdb
con = mdb.connect('localhost', 'user', 'pass', 
'StudentTacker');
cur = con.cursor()
cur.execute("SELECT VERSION()")
i = []





def ParseArray(l): #parses line in socke
    i.append(l.split()[+0] + '-')  # Gets Day
    i.append(l.split()[+1] + '-')  # Gets Month
    i.append(l.split()[+3] + ',')  # Gets Year
    i.append(l.split()[+2] + ',')  # Gets Time
    i.append(l.split()[-2] + ',')  # Gets Device
    i.append(l.split()[+9] + ',')  # Gets ID
    i.append(l.split()[+18] + ',')  # Gets AP
    i.append(l.split()[+19] + ',')  # Gets AP Group
    i.append(l.split()[+16] + '\n')  # Gets MAC
    # This is where I want to REPLACE INTO my table called StudentTest using list i


    print(i)

    del i[:]





if os.path.exists("/-socket"):
    os.remove("/-socket")

sock = socket.socket(socket.AF_UNIX, socket.SOCK_DGRAM)
sock.bind("/home/socket")
infile = sock.makefile('r')




while True:
    l = sock.recv(4096).decode()
    ParseArray(l)

Обновление: я попробовал другой метод, который нашел наэтот сайт о том, как вставить списки Python в БД.

Вот мой новый код, который я использовал внутри своей функции:

def ParseArray(l): #parses line in socke
i.append(l.split()[+0] + '-')  # Gets Day
i.append(l.split()[+1] + '-')  # Gets Month
i.append(l.split()[+3] + ',')  # Gets Year
i.append(l.split()[+2] + ',')  # Gets Time
i.append(l.split()[-2] + ',')  # Gets Device
i.append(l.split()[+9] + ',')  # Gets FSU ID
i.append(l.split()[+18] + ',')  # Gets AP
i.append(l.split()[+19] + ',')  # Gets AP Group
i.append(l.split()[+16] + '\n')  # Gets MAC
#insert line into db else by primary key mac adresss
#update line to db if mac adress doesn't exist
params = ['?' for item in i]
sql    = 'REPLACE INTO SocketTest (month, day, year, time, device, 
Id, ap, ApGroup, MacAdd) VALUES (%s); ' % ', '.join(params)
cur.execute(sql, i)

При этом я получаю сообщение об ошибке:

Traceback (most recent call last):
  File "./UnixSocketReader9.py", line 55, in <module>
ParseArray(l)
  File "./UnixSocketReader9.py", line 28, in ParseArray
cur.execute(sql, i)
  File "/usr/lib64/python2.7/site-packages/MySQLdb/cursors.py", line 
  187, in execute
query = query % tuple([db.literal(item) for item in args])
TypeError: not all arguments converted during string formatting
...