﻿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
278	Problems saving objects with non-id primary key fields and SQLite database	huw@…	Adrian Holovaty	"There are several problems using models which have a non-id primary_key field, when using a SQLite backend. Can't test this with other databases, unfortunately. If we have a python file like:
{{{
from django.core import meta

class D(meta.Model):
    fields = (
        meta.CharField('b', maxlength=8, primary_key=True),
        meta.CharField('c', maxlength=8),
    )

class B(meta.Model):
    fields = (
        meta.CharField('b', maxlength=8),
        meta.CharField('c', maxlength=8),
    )
}}}
then we get this problem: saving objects doesn't appear to add them to the database:
{{{
Python 2.4.1 (#2, Mar 31 2005, 00:05:10) 
[GCC 3.3 20030304 (Apple Computer, Inc. build 1666)] on darwin
Type ""help"", ""copyright"", ""credits"" or ""license"" for more information.
>>> from django.models.petrolprices import ds, bs
>>> d = ds.D(b=""a"", c=""a"")
>>> b = bs.B(b=""a"", c=""a"")
>>> ds.get_list()
[]
>>> bs.get_list()
[]
>>> d.save()
>>> b.save()
>>> ds.get_list()
[]
>>> bs.get_list()
[<B object>]
}}}

If, however, we have the python file containing this:
{{{
class D(meta.Model):
    fields = (
        meta.CharField('b', maxlength=8, primary_key=True),
    )

class B(meta.Model):
    fields = (
        meta.CharField('b', maxlength=45),
    )
}}}

Then attempting to save D objects gets a stack trace:
{{{
>>> from django.models.petrolprices import ds, bs
>>> d = ds.D(b='a')
>>> b = bs.B(b='a')
>>> ds.get_list()
[]
>>> bs.get_list()
[]
>>> b.save()
>>> bs.get_list()
[<B object>]
>>> d.save()
Traceback (most recent call last):
  File ""<stdin>"", line 1, in ?
  File ""/Users/huw/Source/Django/django/utils/functional.py"", line 3, in _curried
    return args[0](*(args[1:]+moreargs), **dict(kwargs.items() + morekwargs.items()))
  File ""/Users/huw/Source/Django/django/core/meta/__init__.py"", line 740, in method_save
    opts.pk.name), db_values + [getattr(self, opts.pk.name)])
  File ""/Users/huw/Source/Django/django/core/db/base.py"", line 10, in execute
    result = self.cursor.execute(sql, params)
  File ""/Users/huw/Source/Django/django/core/db/backends/sqlite3.py"", line 67, in execute
    return Database.Cursor.execute(self, query, params)
pysqlite2.dbapi2.OperationalError: near ""WHERE"": syntax error
}}}"	defect	closed	Database layer (models, ORM)	1.0	normal	fixed			Accepted	0	0	0	0	0	0
