I've tried to implement something like that in mysql with my model but I get this error:
_mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now")
this is my implementation:
from django.db.models import signals
from ucp.panel import models
sql = """
DROP TRIGGER IF EXISTS new_domain;
CREATE TRIGGER new_domain BEFORE INSERT ON panel_domain
FOR EACH ROW
BEGIN
DECLARE service integer;
IF ( NEW.hosted ) THEN
SET @domain = SUBSTRING(LCASE(NEW.name),'.',-1);
SET @domain = CONCAT('domain',@domain);
SELECT service_id INTO service FROM panel_service WHERE specific_data=@domain;
INSERT INTO panel_order (service, member, description, included, discount, discharge_date, cessation_date) VALUES(@service,NEW.member_id,NEW.name,0,0,CURTIME(),CURTIME());
END IF;
END;
"""
def create_trigger(app, created_models, verbosity, **kwargs):
from django.db import connection
cursor = connection.cursor()
cursor.execute(sql)
signals.post_syncdb.connect(create_trigger, sender=models)
any idea¿¿
thanks!
Marc.
Traceback (most recent call last):
File "manage.py", line 11, in <module>
execute_manager(settings)
File "/usr/lib/pymodules/python2.6/django/core/management/__init__.py", line 362, in execute_manager
utility.execute()
File "/usr/lib/pymodules/python2.6/django/core/management/__init__.py", line 303, in execute
self.fetch_command(subcommand).run_from_argv(self.argv)
File "/usr/lib/pymodules/python2.6/django/core/management/base.py", line 195, in run_from_argv
self.execute(*args, **options.__dict__)
File "/usr/lib/pymodules/python2.6/django/core/management/base.py", line 222, in execute
output = self.handle(*args, **options)
File "/usr/lib/pymodules/python2.6/django/core/management/base.py", line 351, in handle
return self.handle_noargs(**options)
File "/usr/lib/pymodules/python2.6/django/core/management/commands/syncdb.py", line 99, in handle_noargs
emit_post_sync_signal(created_models, verbosity, interactive)
File "/usr/lib/pymodules/python2.6/django/core/management/sql.py", line 205, in emit_post_sync_signal
interactive=interactive)
File "/usr/lib/pymodules/python2.6/django/dispatch/dispatcher.py", line 166, in send
response = receiver(signal=self, sender=sender, **named)
File "/var/www/ucp/../ucp/panel/management.py", line 24, in create_trigger
cursor.execute(sql)
File "/usr/lib/pymodules/python2.6/django/db/backends/util.py", line 19, in execute
return self.cursor.execute(sql, params)
File "/usr/lib/pymodules/python2.6/django/db/backends/mysql/base.py", line 84, in execute
return self.cursor.execute(query, args)
File "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 168, in execute
if not self._defer_warnings: self._warning_check()
File "/usr/lib/pymodules/python2.6/MySQLdb/cursors.py", line 75, in _warning_check
warnings = self._get_db().show_warnings()
File "/usr/lib/pymodules/python2.6/MySQLdb/connections.py", line 300, in show_warnings
self.query("SHOW WARNINGS")
_mysql_exceptions.ProgrammingError: (2014, "Commands out of sync; you can't run this command now")