Python:转换元组并通过websockets发送

时间:2015-01-30 06:06:24

标签: python-2.7

我是python的新手,并使用websockets与浏览器进行通信。我有一个表有226列,我必须将这些值发送到客户端,使用的是javascript。但我无法通过websocket发送整个值。我尝试转换成json但仍然无法发送。

('Test', 'Outbound Campaign - 2015-01-16', 'Y', 'NEW', None, None, None, None, 'DOWN', None, 'default', '', 'Y', 100L, '0', 'oldest_call_finish', '9am-9pm', None, 30, '9', '5164536886', '8369', '8309', 'NEVER', 'FULLDATE_CUSTPHONE_CAMPAIGN_AGENT', '', 'NONE', 'vm-goodbye', 'N', None, None, None, None, 'N', 'Y', 'NONE', 7, 'AUDIO', '8307', 'Y', 0, 'Wrapup Call', None, 'Y', 0, 'N', 'MANUAL', 'Y', '3', '3.0', '2100', '0', 0, 'AUTO', 'NONE', ' B N NA DC -', 'N', '', datetime.datetime(2015, 1, 16, 2, 19, 56), 'N', datetime.datetime(2015, 1, 20, 0, 48, 42), ' N NA A AA DROP B NEW -', 'N', 'Y', 'DISABLED', 'N', 998L, '---NONE---', None, 50, '---NONE---', 'N', None, None, '24HRMIDNIGHT', 'NONE', 'Y', None, None, 'US_pol_survey_hello', '1238', '8', 'US_pol_survey_transfer', 'US_thanks_no_contact', 'AGENT_XFER', 'OPTIN', 'NI', '1-DEMOCRAT|2-REPUBLICAN|3-INDEPENDANT|8-OPTOUT|X-NO RESPONSE|', '8300', '/home/survey', 'Y', 'Y', 'DNC_ONLY', 'NONE', 'N', 'Y', 'CAMPAIGN', '', 'vdcwebform', 'LEAD', 'Y', 'Y', 'Y', 'DISABLED', 'N', '', 'ASK', 'N', '', 'US_thanks_no_contact', 'NI', '8300', '', 'US_thanks_no_contact', 'NI', '8300', '0', 'N', 'N', 'DISABLED', 'NONE', 'MANUAL', 'N', 'N', 'N', 'N', 'NONE', 'N', None, '', 'N', None, 'N', None, 'NONE', '', -1, None, None, '', '', '', 'N', 'BLINK_RED', 'DISABLED', 'N', 'ALL_ACTIVE', 'NONE', 'DISABLED', 'Someone is blind monitoring your session', '', 'DISABLED', '', 'DISABLED', 'DISABLED', '', 'ENABLED', 5, 'NONE', 'DISABLED', None, 'PREVIEW_AND_SKIP', 'CALLS_WAIT_CUST_ACW_PAUSE', 'N', '1', 0, 'N', 'STANDARD', 'DISABLED', 'N', 'N', 'LEAD_ASCEND', 'DISABLED', 'UNCHECKED', 'DISABLED', 'CAMPLISTS_ALL', '', 'N', 'PRECAL', 'N', 'CAMPAIGN', 'DISABLED', 'DISABLED', 'DISABLED', 0, 'DISABLED', 0, 'buzz', '', '', 0, 'ADAPT_CALC_ONLY', 'DISPO_ENABLED', '', '--SYSTEM-SETTINGS--', 'CALLID', None, 'N', 'DISABLED', 50, 0, 3, 0, 'DISABLED', '---ALL---', 'N', 'DISABLED', 'CAMPAIGN_SELECTED', 'DISABLED', 'DISABLED', 'DISABLED', '', 'N', '', '', 10, 'N', 0, 'DCMX', 0, 'DISMX', 0, 0, 'SELECTED', 'N', 0)

这是我的结果。 当我尝试通过websockets发送时,这就是我得到的错误。

2015-01-30 11:42:34+0530 [IrisindDial,0,127.0.0.1] Unhandled Error
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/twisted/python/log.py", line 88, in callWithLogger
    return callWithContext({"system": lp}, func, *args, **kw)
  File "/usr/local/lib/python2.7/dist-packages/twisted/python/log.py", line 73, in callWithContext
    return context.call({ILogContext: newCtx}, func, *args, **kw)
  File "/usr/local/lib/python2.7/dist-packages/twisted/python/context.py", line 118, in callWithContext
    return self.currentContext().callWithContext(ctx, func, *args, **kw)
  File "/usr/local/lib/python2.7/dist-packages/twisted/python/context.py", line 81, in callWithContext
    return func(*args,**kw)
--- <exception caught here> ---
  File "/usr/local/lib/python2.7/dist-packages/twisted/internet/posixbase.py", line 614, in _doReadOrWrite
    why = selectable.doRead()
  File "/usr/local/lib/python2.7/dist-packages/twisted/internet/tcp.py", line 214, in doRead
    return self._dataReceived(data)
  File "/usr/local/lib/python2.7/dist-packages/twisted/internet/tcp.py", line 220, in _dataReceived
    rval = self.protocol.dataReceived(data)
  File "/usr/local/lib/python2.7/dist-packages/autobahn/twisted/websocket.py", line 96, in dataReceived
    self._dataReceived(data)
  File "/usr/local/lib/python2.7/dist-packages/autobahn/websocket/protocol.py", line 1328, in _dataReceived
    self.consumeData()
  File "/usr/local/lib/python2.7/dist-packages/autobahn/websocket/protocol.py", line 1344, in consumeData
    while self.processData() and self.state != WebSocketProtocol.STATE_CLOSED:
  File "/usr/local/lib/python2.7/dist-packages/autobahn/websocket/protocol.py", line 1503, in processData
    return self.processDataHybi()
  File "/usr/local/lib/python2.7/dist-packages/autobahn/websocket/protocol.py", line 1817, in processDataHybi
    fr = self.onFrameEnd()
  File "/usr/local/lib/python2.7/dist-packages/autobahn/websocket/protocol.py", line 1947, in onFrameEnd
    self._onMessageEnd()
  File "/usr/local/lib/python2.7/dist-packages/autobahn/twisted/websocket.py", line 132, in _onMessageEnd
    self.onMessageEnd()
  File "/usr/local/lib/python2.7/dist-packages/autobahn/websocket/protocol.py", line 743, in onMessageEnd
    self._onMessage(payload, self.message_is_binary)
  File "/usr/local/lib/python2.7/dist-packages/autobahn/twisted/websocket.py", line 136, in _onMessage
    self.onMessage(payload, isBinary)
  File "login.py", line 91, in onMessage
    self.sendMessage(campaignDetails)
  File "/usr/local/lib/python2.7/dist-packages/autobahn/websocket/protocol.py", line 2474, in sendMessage
    assert(type(payload) == bytes)
exceptions.AssertionError: 

感谢您的回答!

2 个答案:

答案 0 :(得分:1)

发送mysql接收数据的最佳方法是将元组转换为json格式并通过websocket发送。

with con:
        cur = con.cursor()          
        cur.execute("SELECT * FROM tablename")          
        a = [ dict(line) for line in [zip([ column[0] for column in 
                cur.description], row) for row in cur.fetchall()] ]                                    
        self.sendMessage(json.dumps(a, default=date_handler, sort_keys=True, indent=4, separators=(',', ': '))); 

在某些情况下,json无法序列化日期时间格式,因此请手动转换它。

def date_handler(obj):
 return obj.isoformat() if hasattr(obj, 'isoformat') else obj 

答案 1 :(得分:0)

给定字符串msg = u"hello",您应该sendMessage(msg.encode('utf8')发送WebSocket文本消息。

给定字节字符串msg = b"\0\1\2\3",您应该sendMessage(msg, isBinary = True)发送WebSocket二进制消息。