Django で 生SQL を発行する際、特定の SQL で
File "<my-project>/.venv/lib/python3.9/site-packages/MySQLdb/connections.py", line 259, in query
_mysql.connection.query(self, query)
django.db.utils.OperationalError: (2027, 'Malformed packet')
が発生した。
django = "==3.2.15"
mysqlclient = "==2.0.3" (2.1.1でも発生するのを確認した)
発生するコードは次のようなもの
with connections['default'].cursor() as cursor:
sql = """SELECT status_id FROM order_status
WHERE order_status_name IN ("入金済み", "完了")"""
cursor.execute(sql)
print(cursor.fetchall())
この時、この SQL は結果が期待どおりではないものの完了し、次のSQL の発行時に
django.db.utils.OperationalError: (2027, 'Malformed packet')
このエラーが発生する。
SELECT status_id FROM order_status
WHERE order_status_name IN ("入金済み", "完了")
この SQL 文で
order_status\nWHERE
となっている箇所の、改行の前後どちらかに半角スペースを入れるか、
"入金済み", "完了"
このダブルクォーテーションをシングルクオーテーションに変える。それで発生しなくなる。
MySQL では、ダブルクオーテーションは避けたほうが良い。
コメント