Thanks Tom.

On Fri, Nov 18, 2011 at 2:32 PM, Tom Evans <tevans...@googlemail.com> wrote:

> On Fri, Nov 18, 2011 at 1:25 PM, Kayode Odeyemi <drey...@gmail.com> wrote:
> > On Fri, Nov 18, 2011 at 12:04 PM, Tom Evans <tevans...@googlemail.com>
> > wrote:
> >>
> >> On Fri, Nov 18, 2011 at 8:20 AM, Kayode Odeyemi <drey...@gmail.com>
> wrote:
> >> > Hello friends,
> >> >
> >> > I'm having a deep Django-MySQLDB error and I'm doing some debugging to
> >> > trace exactly where the problem is. It seems to me that this is very
> >> > related
> >> > to MySQLDB
> >> > cursor implementaton.
> >> >
> >> > What I want to do is to run the raw sql from the interactive mode like
> >> > this:
> >> >
> >> > import MySQLdb
> >> > db=MySQLdb.connect(passwd="pass",db="dname")
> >> > c=db.cursor()
> >> > max_price=5
> >> > c.execute(RAW_SQL_HERE)
> >> >
> >> > In case you don't mind, here is the full stack trace:
> >> >
> >> > Traceback (most recent call last):
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\celery-2.3.2-py2.7.egg\celery\execute\trace.py"
> >> > , line 36, in trace
> >> > return cls(states.SUCCESS, retval=fun(*args, **kwargs))
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\celery-2.3.2-py2.7.egg\celery\app\task\__init__
> >> > .py", line 232, in __call__
> >> > return self.run(*args, **kwargs)
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\celery-2.3.2-py2.7.egg\celery\app\__init__.py",
> >> > line 172, in run
> >> > return fun(*args, **kwargs)
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\db\transaction.py",
> >> > line 217, in inner
> >> > res = func(*args, **kwargs)
> >> > File "api\tasks.py", line 146, in queue_transaction
> >> > txn.save()
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\db\models\base.py",
> >> > line 460, in save
> >> > self.save_base(using=using, force_insert=force_insert,
> >> > force_update=force_update)
> >> >
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\db\models\base.py",
> >> > line 570, in save_base
> >> > created=(not record_exists), raw=raw, using=using)
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\dispatch\dispatcher
> >> > .py", line 172, in send
> >> > response = receiver(signal=self, sender=sender, **named)
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\django_audit_log-0.2.2-py2.7.egg\audit_log\mode
> >> > ls\managers.py", line 64, in post_save
> >> > self.create_log_entry(instance, created and 'I' or 'U')
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\django_audit_log-0.2.2-py2.7.egg\audit_log\mode
> >> > ls\managers.py", line 61, in create_log_entry
> >> > manager.create(action_type = action_type, **attrs)
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\db\models\manager.p
> >> > y", line 138, in create
> >> > return self.get_query_set().create(**kwargs)
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\db\models\query.py"
> >> > , line 360, in create
> >> > obj.save(force_insert=True, using=self.db)
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\db\models\base.py",
> >> > line 460, in save
> >> > self.save_base(using=using, force_insert=force_insert,
> >> > force_update=force_update)
> >> >
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\db\models\base.py",
> >> > line 553, in save_base
> >> > result = manager._insert(values, return_id=update_pk, using=using)
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\db\models\manager.p
> >> > y", line 195, in _insert
> >> > return insert_query(self.model, values, **kwargs)
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\db\models\query.py"
> >> > , line 1436, in insert_query
> >> > return query.get_compiler(using=using).execute_sql(return_id)
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\db\models\sql\compi
> >> > ler.py", line 791, in execute_sql
> >> > cursor = super(SQLInsertCompiler, self).execute_sql(None)
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\db\models\sql\compi
> >> > ler.py", line 735, in execute_sql
> >> > cursor.execute(sql, params)
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\db\backends\util.py
> >> > ", line 34, in execute
> >> > return self.cursor.execute(sql, params)
> >> > File
> >> >
> >> >
> "C:\Python27\lib\site-packages\django-1.3-py2.7.egg\django\db\backends\mysql\b
> >> > ase.py", line 86, in execute
> >> > return self.cursor.execute(query, args)
> >> > File "build\bdist.win32\egg\MySQLdb\cursors.py", line 176, in execute
> >> > if not self._defer_warnings: self._warning_check()
> >> > File "build\bdist.win32\egg\MySQLdb\cursors.py", line 92, in
> >> > _warning_check
> >> > warn(w[-1], self.Warning, 3)
> >> > Warning: Data truncated for column 'jno' at row 1
> >> > None
> >> >
> >> >
> >> > Some of the solutions I found on the internet such as changing teh
> >> > default
> >> > character set
> >> > to utf8 has been done. I also consulted MySQL doc ref by changing the
> >> > sql_mode to
> >> > TRADITIONA both at session and global level, as well as in
> settings.py.
> >> > Still no luck.
> >> >
> >> > Please how do I get the raw SQL executed by Django?
> >> >
> >> > Any help will be appreciated.
> >> >
> >>
> >> Your SQL query, which you didn't show, is inserting data into a DB
> >> table, whose definition you didn't show. The data it is inserting in,
> >> which you didn't show, is getting truncated in the 'jno' column.
> >
> > Why this is getting truncated I don't know because the field has a
> length of
> > 50 and the value I'm trying to store is 01234SS. So I just concluded that
> > the data I'm trying to insert in not the problem here neither it is the
> > table structure.
> >
>
> I don't know why; you still haven't shown your DB table, data, query...
>
> Strange conclusion btw.
>

Here is what it looks like:

models.py
---------------
class Transaction(models.Model):
    id = models.AutoField(primary_key=True)
    type = models.CharField(max_length=50)
    nid = models.IntegerField()
    jamb_no = models.CharField(max_length=20, blank=False)


tasks.py
------------
Please see the full function at http://codepad.org/ChStEwd5

>
> >>
> >> This
> >> is raised as an exception, since you set sql_mode to TRADITIONAL
> >
> > Before setting the sql_mode to TRADITIONAL, it was at its default state,
> and
> > it still got the warnings as error.
> >
> >>
> >> and/or run in DEBUG mode, which makes django configure
> >> Database.Warning as errors.
> >
> > Does this mean that if I'm not running Django in DEBUG mode, the record
> will
> > still be inserted ignoring the warnings?
>
> Yes, the warning is still generated, but it is suppressed and no
> exception will be raised, unless you are running in TRADITIONAL mode.
>

OMG! You just saved me 4 days of trouble, head-ache and sleep-less night.

Thank you very much.

>
> >>
> >> Django doesn't execute the query, you are executing it on the raw DB
> >> cursor, so it will not be logged (certainly not by DDT).
> >
> > Actually I just want to put some debug trace in Django source and
> re-compile
> > so I can see the raw sql. Isn't this possible? (Already considering
> > django-debug-toolbar)
>
> DDT reports the queries that are logged by django's ORM. This query is
> not made by Django's ORM. Therefore, it will not be logged by DDT.
>
> Django is not making the query, you are, using a py-mysqldb cursor.
> Therefore to log it in more detail than what you already know - you
> are passing the query and the arguments - you would need to look into
> py-mysqldb.
>
> Just for the sake of learning. How am I the one creating the queries? I
only created a model to be saved by calling save() on it. The rest is left
to Django to handle as I can see in the traceback. Though I never saw the
sql (which is what I've been looking for) .

py-mysqldb also doesn't create the query. It does some magic of importing a
MySQL C library and then doing something like db.query() on the Connection
subclass, with _mysql.connection as it's parent. But the exact query()
method was never found. I just couldn't trace it.

>
> --
> You received this message because you are subscribed to the Google Groups
> "Django users" group.
> To post to this group, send email to django-users@googlegroups.com.
> To unsubscribe from this group, send email to
> django-users+unsubscr...@googlegroups.com.
> For more options, visit this group at
> http://groups.google.com/group/django-users?hl=en.
>
>


-- 
Odeyemi 'Kayode O.
http://www.sinati.com. t: @charyorde

-- 
You received this message because you are subscribed to the Google Groups 
"Django users" group.
To post to this group, send email to django-users@googlegroups.com.
To unsubscribe from this group, send email to 
django-users+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/django-users?hl=en.

Reply via email to