У меня есть список в Python, который я сейчас вставляю в таблицу SQL с именем SocketTest. В основном я храню журналы подключений. Я хочу просто сохранить последнюю точку доступа (точку доступа), к которой кто-то подключен, вместо списка их, как я делаю сейчас. Они читают и проходят через сокет в хронологическом порядке, поэтому самый новый список, который я получаю в своей функции, всегда является самым актуальным для этого пользователя. По сути, моя программа читает из сокета и составляет список с информацией, разделенной запятыми, затем я вставляю ее в свою таблицу, и, хотя у меня все еще есть информация в сокете, она продолжает повторяться. Мой список по имени я. Я пытался понять это сам, но я не опытный. Я хотел бы посмотреть на PK, который является идентификатором, и вставить строку, если идентификатор еще не сохранен, и заменить или обновить сохраненную строку, если идентификатор уже существует. Я искал замену и вставил дубликат ключа, но не смог заставить его работать. Любая помощь приветствуется, код ниже.
SocketTest - это таблица:
ПК это идентификатор:
Pringle - пример строки:
РЕДАКТИРОВАТЬ: я импортирую MYSQLDB как mdb
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
#insert line into db else by primary key (ID)
#update line to db if ID doesn't exist
#pringle = ['Dec', '11', '2018', '15:10:51', 'iPhone', '[jeref2]',
# 'home', 'hm1', '45.88.34.58)\n']
sql = "INSERT INTO SocketTest (month, day, year, time, device, Id, ap,
ApGroup, MacAdd) VALUES ('%s');" % "', '".join(i)
cur.execute(sql)
con.commit()
Редактировать: Остальной код
#!/bin/python
import socket
import os, os.path
import MySQLdb as mdb
con = mdb.connect('x', 'x', 'x', 'x');
cur = con.cursor()
#pringle=['Dec', '11', '2018', '15:10:51', 'iPhone', '[josheer]', 'FRD', 'BHJ', '45.33.88.34)\n']
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
try:
row_to_insert = [val1, val2, val3]
cur.execute("INSERT INTO SocketTest (month, day, year, time, device,Id, ap, ApGroup, MacAdd) VALUES(%s, %s, %s)",
(i)
except: pymysql.IntegrityError:
cur.execute("""UPDATE SocketTest
SET column2 = {1}, column3 = {2}
WHERE column1 = {0}
""".format(val1, val2, val3)
#sql = "REPLACE INTO SocketTest (month, day, year, time, device,Id, ap, ApGroup, MacAdd) VALUES ('%s');" % "', '".join(
#i)
#cur.execute(sql)
#con.commit()
con.commit()
print(i)
del i[:]
i = []
if os.path.exists("/home/log/x"):
os.remove("/home/log/x")
sock = socket.socket(x, sx)
sock.bind("/home/log/xt")
infile = sock.makefile('r')
while True:
l = sock.recv(4096).decode()
ParseArray(l)