我的思路是这样的,之前的想法是:把接收过来的socket数据,充当sql的字段属性变量,来实现数据写入功能。但是几经波折,发现难题攻克不了。现在,我换了另外一种思路:事先把数据库的插入数据命令写在socket里面,到了python直接执行接收到的插入命令就完成写入的操作。具体代码如下:运行没有报错,但是写入也不成功。求各路大神指导一下(Ps: 然后,我发送:"""INSERT money(name,account, saving, expend, income) VALUES ('aaa', '111', '222', '222', '2000')""" 这段数据,python就写入数据。 )
import socket
import time
import pymysql
host = ''
port = 80
bufsize = 1024
addr = (host, port) # host设定为空,表示可以与任何ip的socket在端口51423通信
设置socket,AF_INET表示是IPV4标准,SOCK_STREAM是TCP传输协议
tcpSerSock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
tcpSerSock.bind(addr)
tcpSerSock.listen(1)
quit = False
shutdown = False
while True:
print('等待数据中...')
tcpCliSock, addr = tcpSerSock.accept() # 不断监听获取新的客户端连接
print('数据来自:', addr)
db = pymysql.connect("localhost", "root", "000000", "money")#连接数据库
cursor = db.cursor()#获取光标
while True:
# 与客户端建立连接之后,获取客户端传来的数据
data = tcpCliSock.recv(bufsize)
data = data.decode('gbk')
sql = data #把接收到的数据(已经写好的插入命令模板)复制给sql
try:
# 执行sql语句
cursor.execute(sql)
# 提交到数据库执行
db.commit()
except:
db.rollback()
if not sql:
break
ss = '[%s] %s' % (time.ctime(), data)
tcpCliSock.sendall(ss.encode('gbk'))
print(ss)
if data == 'bye':
quit = True
break
elif data == 'shutdown':
shutdown = True
break
print('Bye-bye:[%s:%d]' % (addr[0], addr[1]))
tcpCliSock.close()
if shutdown:
break
tcpSerSock.close()
print('Server has been closed')