﻿id	summary	reporter	owner	description	type	status	component	version	severity	resolution	keywords	cc	stage	has_patch	needs_docs	needs_tests	needs_better_patch	easy	ui_ux
20588	TypeError: 'NoneType' object has no attribute '__getitem__' in fetch_returned_insert_id function	tazo90@…	tazo90	"{{{
Traceback (most recent call last):
  File ""<console>"", line 1, in <module>
  File ""C:\Python27\lib\site-packages\django\db\models\manager.py"", line 137, in create
    return self.get_query_set().create(**kwargs)
  File ""C:\Python27\lib\site-packages\django\db\models\query.py"", line 377, in create
    obj.save(force_insert=True, using=self.db)
  File ""C:\Python27\lib\site-packages\django\db\models\base.py"", line 463, in save
    self.save_base(using=using, force_insert=force_insert, force_update=force_update)
  File ""C:\Python27\lib\site-packages\django\db\models\base.py"", line 551, in save_base
    result = manager._insert([self], fields=fields, return_id=update_pk, using=using, raw=raw)
  File ""C:\Python27\lib\site-packages\django\db\models\manager.py"", line 203, in _insert
    return insert_query(self.model, objs, fields, **kwargs)
  File ""C:\Python27\lib\site-packages\django\db\models\query.py"", line 1593, in insert_query
    return query.get_compiler(using=using).execute_sql(return_id)
  File ""C:\Python27\lib\site-packages\django\db\models\sql\compiler.py"", line 914, in execute_sql
    return self.connection.ops.fetch_returned_insert_id(cursor)
  File ""C:\Python27\lib\site-packages\django\db\backends\__init__.py"", line 548, in fetch_returned_insert_id
    return cursor.fetchone()[0]
TypeError: 'NoneType' object has no attribute '__getitem__'
}}}

It happened when I was trying to use plpgsql trigger from custom sql that returned NULL.

The error means we tried to do something like None[0]. In the backtrace, it says return cursor.fetchone()[0], which means that your cursor.fetchone() is None.

Fix code, you have to change:
 {{{return cursor.fetchone()[0]}}}
from C:\Python27\lib\site-packages\django\db\backends\__init__.py"", line 548, in fetch_returned_insert_id to:

{{{
res = cursor.fetchone()
if res:
     return res[0]
else:
     return None
}}}

After that change, everything is working.
"	Bug	closed	Database layer (models, ORM)	1.4	Normal	invalid	psycopg2, fetch_returned_insert_id	tazo90@…	Unreviewed	0	0	0	0	0	0
