关于把socket数据写入数据库的问题

我的思路是这样的,之前的想法是:把接收过来的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')


3个回答

不太懂python不过insert sql是不是写错了,应该是insert into tablename 吧?

xindanze9661
xindanze9661 insert tablename 和insert into table都可以的,亲测有效。好烦躁啊,我用python直接写入就可以,换了一种方式(把接受到的数据写入数据库),就不行。问了几个网站,回答的人寥寥无几
2 年多之前 回复
你有没有尝试打印出你收到的SQL,看看是什么类型的,到底是不是你想的那样

试过了,后来捕获错误,发现原来是输入的数据类型跟数据库字段的定义不对应,导致不能写进去。谢谢哈~

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!