如何使用.split()将数据从python套接字插入到SQL Server表中,以分离条目并使用变量执行



我正试图使用Python将从套接字读取的rfid标签插入SQL Server数据库。由于我使用的是tcp套接字,数据有时会合并并将多个条目放在一行中,我需要每个读取都是不同的行。我已经浏览了多个网站,我能找到的最接近的东西是这个Python套接字从服务器接收到不一致的消息,但我没能让它工作。

我可以用len把它们分开,但我不可能知道有多少读数会组合在一起。这是我当前的代码(被注释掉的部分使用len(

while 1: 
def data_entry():
c.execute('INSERT INTO ORFinishing(Tag) VALUES(?)',(data2))

conn.commit()

data = s.recv(1024)
data2= data.decode("utf-8").rstrip('n')
print(data2)

if len(data2) ==24:
print("correct")

data_entry()
del data2


else:
print("wrong")
data3 = str(data2)
data4 = data3.split('n')
print(data4)


def many():
c.executemany('INSERT INTO ORFinishing(Tag) VALUES(?)', data4)
conn.commit()

many()

# one,two = data2[:24], data2[-24:]


# if len(one)==24:
#     def data_entry1():
#         c.execute('INSERT INTO ORFinishing(Tag) VALUES(?)',(one))

#         conn.commit()

#     data_entry1()

# if len(two)==24:
#     def data_entry2():
#         c.execute('INSERT INTO ORFinishing(Tag) VALUES(?)',(one))

#         conn.commit()

#     data_entry2()

我见过一些人使用executemany的例子,但它总是手动输入元组或列表。我还试着把它变成一个元组。这是我得到的输出。

运行文件('C:/a/tcpocket.py',wdir='C:/a'(62303735303500000000000对的623031323638000000000000623031323734000000000000062303332383036000000000错误的【'623031323638000000000000','623031323 734000000000','62303332383036000000000']

但它不会将字符串分割(错误部分(中的任何数据插入数据库。对于上面的情况,它在数据库中只有一次读取。使用len确实会将其放入数据库,但它可能是5次读取加起来,也可能是100次读取加在一起,所以这不是一个真正可行的选择。

编辑:我尝试了另一个我知道的代码,它在数据进入时将数据分离。我从这里得到了它——在Python TCP流中使用分隔符。问题是没有一个被插入到我的数据库中。这是代码。

尝试:acmulator="而True:

#received = str(s.recv(1024), "utf-8")
received = str(s.recv(1024).decode("utf-8"))
divided_message = received.split('n')

if len(divided_message) >= 2:
#print('line 1: ', acumulator + divided_message[0].strip())
data1= str(acumulator + divided_message[0].strip())
print('line 10: ' + data1)

def data_entry():
c.executemany('INSERT INTO ORFinishing(Tag) VALUES(?)',(data1))
conn.commit()
data_entry()


for i in range(1, len(divided_message) - 1):
#print('line 2: ', divided_message[i].strip()) 
data2 = str(divided_message[i].strip())
print("line 5: " + data2)


def data_entry2():
c.executemany('INSERT INTO ORFinishing(Tag) VALUES(?)',(data2))
conn.commit()
data_entry2()


if 'n' in divided_message[-1]:
print('line 3: ', divided_message[-1].strip())
acumulator = ''


data3 = str(divided_message[-1].strip())
def data_entry3():
c.executemany('INSERT INTO ORFinishing(Tag) VALUES(?)',(data3))
conn.commit()
data_entry3()
del data3

else:
acumulator = str(divided_message[-1])

def data_entry4():
c.execute('INSERT INTO ORFinishing(Tag) VALUES(?)',(acumulator))
conn.commit()
data_entry4()
del data2

else:
acumulator += divided_message[0]
print("else: " + acumulator)
# data_entry()
# del data1



我自己找到了答案。我把它弄得太复杂了。以下是完整的代码,以防其他人遇到同样的问题。

import socket
import pyodbc
conn = pyodbc.connect('Driver=your_driver;'
'Server=your_server;'
'Database=your_database;'
'Trusted_Connection=yes;')

c=conn.cursor()
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("your ip address", your socket))
sql = "INSERT INTO your_table(your column) VALUES(?)"
while 1: 
data = s.recv(1024)
data2= data.decode("utf-8").rstrip('n')

if len(data2) ==24:
c.execute(sql,(data2))
conn.commit()
print("correct: " + data2)

else:

data3 = data2.split("n")
for split in data3:
print("fix: " + split)
c.execute(sql, split)
conn.commit()

s.shutdown(socket.SHUT_RD)
s.close()

最新更新