首页 > 解决方案 > pymysql 上的断言错误,但查询在控制台上有效(3 连接查询)

问题描述

我有一个查询连接 mysql 上的 3 个表,在控制台(和 mysql 工作台中)它工作得很好,但是当我尝试使用 pymysql 在我的 python 代码中执行相同的查询时,它会导致断言和协议错误。(这不会发生在我脚本上的任何其他查询中,为了确保这不是游标错误,我专门为此查询创建了一个游标)

我的代码:

        mysql_conn = pymysql.connect(host=hostb, user=userb, passwd=passb, db=dbb, connect_timeout=5,cursorclass=pymysql.cursors.DictCursor, autocommit=True) 


cursor4xx=mysql_conn.cursor()
        qrypar= """ SELECT wr.report_id,wr.campaign_id as campaign_id,wr.created_at,wr.campaign_reach,wr.CR,wr.unique_audience,wr.avg_visits,wr.duration,wr.OTS,wr.GAV,wr.GRP,wr.total_audience,wr.cities,wr.weekdays,wr.ready,wr.screens,wr.zones,wr.advertisers,wr.weeks,wr.week_data,wc.campaign_name,wc.description,wc.ad_duration,wc.ad_quantity,wc.start_date,wc.end_date,wc.advertiser_id,dzr.digital_zone_id,dzr.results FROM reports wr join wave_campaigns wc ON wr.campaign_id = wc.campaign_id join digital_zone_reports dzr on dzr.campaign_id = wc.campaign_id where wr.ready = 1 order by wr.created_at desc  """ 
    
    cursor4xx.execute(qrypar)
    data_campaign=cursor4xx.fetchall()

和我得到的错误

[ERROR] AssertionError: Protocol error, expecting EOF
Traceback (most recent call last):
  File "/var/task/handler.py", line 174, in get_zones_data
    cursor4xx.execute(qrypar)
  File "/var/task/pymysql/cursors.py", line 148, in execute
    result = self._query(query)
  File "/var/task/pymysql/cursors.py", line 310, in _query
    conn.query(q)
  File "/var/task/pymysql/connections.py", line 548, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "/var/task/pymysql/connections.py", line 775, in _read_query_result
    result.read()
  File "/var/task/pymysql/connections.py", line 1163, in read
    self._read_result_packet(first_packet)
  File "/var/task/pymysql/connections.py", line 1235, in _read_result_packet
    self._get_descriptions()
  File "/var/task/pymysql/connections.py", line 1338, in _get_descriptions
    assert eof_packet.is_eof_packet(), "Protocol error, expecting EOF"

作为进一步的参考,我正在使用 python3.8 并且代码在 AWS lambda 函数中执行,mysql db 也在 AWS RDS 上运行

标签: mysqlaws-lambdaamazon-rdspymysql

解决方案


推荐阅读