xindanze9661
xindanze9661
采纳率50%
2017-04-06 11:45 阅读 1.9k

关于把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条回答 默认 最新

  • Hello_Word___ ——。—— 2017-04-07 02:07

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

    点赞 评论 复制链接分享
  • u010136832 小邓在路上 2017-04-07 09:36
    你有没有尝试打印出你收到的SQL,看看是什么类型的,到底是不是你想的那样
    
    点赞 评论 复制链接分享
  • xindanze9661 xindanze9661 2017-04-07 10:00

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

    点赞 评论 复制链接分享

相关推荐