Bogdanp / django_dramatiq

A Django app that integrates with Dramatiq.
https://dramatiq.io
Other
347 stars 77 forks source link

MySQL 1064 Error #11

Closed myyou closed 6 years ago

myyou commented 6 years ago

When I test example :

@dramatiq.actor
def count_words(url):
   response = requests.get(url)
   count = len(response.text.split(" "))
   print(f"There are {count} words at {url!r}.")

the following error will occur:

In [5]: count_words.send('http://baidu.com')
CRITICAL:dramatiq.broker.RedisBroker:Unexpected failure in after_enqueue.
Traceback (most recent call last):
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 101, in execute
    return self.cursor.execute(query, args)
  File "/Users/kamui/work/hillinsight/cube-new/utils/db/connect.py", line 144, in execute
    result = func(self, query, *args, **kwargs)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/pymysql/cursors.py", line 166, in execute
    result = self._query(query)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/pymysql/cursors.py", line 322, in _query
    conn.query(q)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/pymysql/connections.py", line 856, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/pymysql/connections.py", line 1057, in _read_query_result
    result.read()
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/pymysql/connections.py", line 1340, in read
    first_packet = self.connection._read_packet()
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/pymysql/connections.py", line 1014, in _read_packet
    packet.check_error()
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/pymysql/connections.py", line 393, in check_error
    err.raise_mysql_exception(self._data)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/pymysql/err.py", line 107, in raise_mysql_exception
    raise errorclass(errno, errval)
pymysql.err.ProgrammingError: (1064, 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'_binary\'{\\"queue_name\\":\\"default\\",\\"actor_name\\":\\"count_words\\",\\"args\\":[\\"h\' at line 1')

The above exception was the direct cause of the following exception:

Traceback (most recent call last):
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/dramatiq/broker.py", line 99, in emit_after
    getattr(middleware, "after_" + signal)(self, *args, **kwargs)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/django_dramatiq/middleware.py", line 21, in after_enqueue
    Task.tasks.create_or_update_from_message(message, status=status)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/django_dramatiq/models.py", line 19, in create_or_update_from_message
    **extra_fields,
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/django/db/models/query.py", line 394, in create
    obj.save(force_insert=True, using=self.db)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/django/db/models/base.py", line 808, in save
    force_update=force_update, update_fields=update_fields)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/django/db/models/base.py", line 838, in save_base
    updated = self._save_table(raw, cls, force_insert, force_update, using, update_fields)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/django/db/models/base.py", line 924, in _save_table
    result = self._do_insert(cls._base_manager, using, fields, update_pk, raw)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/django/db/models/base.py", line 963, in _do_insert
    using=using, raw=raw)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/django/db/models/manager.py", line 85, in manager_method
    return getattr(self.get_queryset(), name)(*args, **kwargs)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/django/db/models/query.py", line 1076, in _insert
    return query.get_compiler(using=using).execute_sql(return_id)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/django/db/models/sql/compiler.py", line 1112, in execute_sql
    cursor.execute(sql, params)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/django/db/backends/utils.py", line 79, in execute
    return super(CursorDebugWrapper, self).execute(sql, params)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/django/db/utils.py", line 94, in __exit__
    six.reraise(dj_exc_type, dj_exc_value, traceback)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/django/utils/six.py", line 685, in reraise
    raise value.with_traceback(tb)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/django/db/backends/utils.py", line 64, in execute
    return self.cursor.execute(sql, params)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/django/db/backends/mysql/base.py", line 101, in execute
    return self.cursor.execute(query, args)
  File "/Users/kamui/work/hillinsight/cube-new/utils/db/connect.py", line 144, in execute
    result = func(self, query, *args, **kwargs)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/pymysql/cursors.py", line 166, in execute
    result = self._query(query)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/pymysql/cursors.py", line 322, in _query
    conn.query(q)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/pymysql/connections.py", line 856, in query
    self._affected_rows = self._read_query_result(unbuffered=unbuffered)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/pymysql/connections.py", line 1057, in _read_query_result
    result.read()
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/pymysql/connections.py", line 1340, in read
    first_packet = self.connection._read_packet()
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/pymysql/connections.py", line 1014, in _read_packet
    packet.check_error()
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/pymysql/connections.py", line 393, in check_error
    err.raise_mysql_exception(self._data)
  File "/Users/kamui/work/pythonenv/cubeenv/lib/python3.6/site-packages/pymysql/err.py", line 107, in raise_mysql_exception
    raise errorclass(errno, errval)
django.db.utils.ProgrammingError: (1064, 'You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near \'_binary\'{\\"queue_name\\":\\"default\\",\\"actor_name\\":\\"count_words\\",\\"args\\":[\\"h\' at line 1')
Out[5]: Message(queue_name='default', actor_name='count_words', args=('http://baidu.com',), kwargs={}, options={'redis_message_id': '66536a54-7cd5-430d-8ef5-3d01c42bb6da'}, message_id='d6dd1670-1167-43f1-8e0e-5caa7960bb84', message_timestamp=1523273330881)

my django version is 1.11.8 and MySQL version is 5.7 and the SQL based on Task Model is:

CREATE TABLE `django_dramatiq_task` (
  `id` char(32) NOT NULL,
  `status` varchar(8) NOT NULL,
  `created_at` datetime(6) NOT NULL,
  `updated_at` datetime(6) NOT NULL,
  `message_data` longblob NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
Bogdanp commented 6 years ago

That's odd. You might have better luck asking on the Django issue tracker, because I don't use the Django ORM with MySQL. Seems like this is something that should work though.

myyou commented 6 years ago

I replace the filed's type from longblob to text and it can works, mybe orm don't support better. what ever i thank you for answering me.