You are right. sqlite cannot drop columns and this means web2py cannot
change the contraint from unique=False to unique=False. Although it
will change the validator and it will enforce the contraint in forms.

On Jan 5, 9:43 pm, Christopher Helck <christopher.he...@gmail.com>
wrote:
> I'm able to reproduce the problem.
> 1. Delete all database files.
> 2. Create table 'foo' without the unique attribute and add the three rows.
> No errors because there is no unique constraint.
> 3. Add 'unique=True' to table foo's definition and add the three rows. No
> error. I guess Sqlite can't update existing tables?
> 4. Delete all database files.
> 5. Rerun test with unique attribute. Third insert fails.
>
> From various things I've read it seems that Sqlite/web2py has problems with
> migrating tables. So I have to ask if Sqlite is the right choice for me? My
> DB needs are small: five tables with a total of 500 rows. I do expect to
> tweak the tables every now and then, and would prefer not to lose data.
>
> I'm wary of moving to a DB that is much bigger. I've observed many projects
> slow down to a crawl when they start using systems like Oracle because of
> problems coordinating changes with DBAs, tuning, and complex
> deployment/upgrades. I'd like to avoid the whole enterprise database space
> entirely.
>
> Any suggestions?
> Thanks,
> C. Helck
>
> On Mon, Jan 4, 2010 at 10:14 PM, mdipierro <mdipie...@cs.depaul.edu> wrote:
> > I just tried it on mine:
> > >>> db=DAL('sqlite://test.db')
> > >>> db.define_table('foo',  Field('name', unique=True))
> > >>> db.foo.truncate()
> > >>> db.foo.insert(name='joe')
> > 1
> > >>> db.foo.insert(name='sally')
> > 2
> > >>> db.foo.insert(name='joe')
> > Traceback (most recent call last):
> >  File "<console>", line 1, in <module>
> >  File "/Users/mdipierro/web2py/gluon/sql.py", line 1849, in insert
> >    self._db._execute(query)
> >  File "/Users/mdipierro/web2py/gluon/sql.py", line 891, in <lambda>
> >    self._execute = lambda *a, **b: self._cursor.execute(*a, **b)
> > IntegrityError: column name is not unique
>
> > >>> print "Tables"
> > Tables
> > >>> print db().select(db.foo.ALL)
> > foo.id,foo.name
> > 1,joe
> > 2,sally
>
> > I guess you have a buggy version of sqlite. I would also try delete
> > everything in databases/ and try again. In case something was
> > corrupted with the .table files.
>
> > On Jan 4, 8:39 pm, Christopher Helck <christopher.he...@gmail.com>
> > wrote:
> > > My DB skills are not strong, so please forgive if this is a dumb
> > question.
> > > Why does the following from my db.py not do what I want it to do?
> > > #################
> > > db.define_table('foo',  Field('name', unique=True))
>
> > > db.foo.truncate()
> > > db.foo.insert(name='joe')
> > > db.foo.insert(name='sally')
> > > db.foo.insert(name='joe')
>
> > > print "Tables"
> > > print db().select(db.foo.ALL)
>
> > > db.commit()
> > > ###################
> > > Because I've defined the field 'name' to be unique, I expected some sort
> > of
> > > error to occur the second time I insert the row containing 'joe'.
> > Instead, I
> > > end up with a table with three rows: joe, sally, and joe. I'm using
> > SqlLite.
>
> > > Thanks,
> > > C Helck
>
> > --
>
> > You received this message because you are subscribed to the Google Groups
> > "web2py-users" group.
> > To post to this group, send email to web...@googlegroups.com.
> > To unsubscribe from this group, send email to
> > web2py+unsubscr...@googlegroups.com<web2py%2bunsubscr...@googlegroups.com>
> > .
> > For more options, visit this group at
> >http://groups.google.com/group/web2py?hl=en.
>
>
-- 
You received this message because you are subscribed to the Google Groups 
"web2py-users" group.
To post to this group, send email to web...@googlegroups.com.
To unsubscribe from this group, send email to 
web2py+unsubscr...@googlegroups.com.
For more options, visit this group at 
http://groups.google.com/group/web2py?hl=en.


Reply via email to