Yeah, I should have included a small script. The script I am using is 
fairly large, though. 

Here is an outline of my script which should hit the most salient details. 

movie = {}

for tag in tags:
   movie[title] =  #parsed from xml directly
   
   movie[genres] = # genre names pulled from xml. If new, added to genre 
table.  IDs returned as list with this ids = [r.id for r in 
db(db.genre.api_id.belongs(api_vals)).select(db.genre.id)] Object tested 
for type and values
   
   movie[actors] = #same as genre but  uses person table for movie.actors
   
   movie[directors] = #same as genre but  uses  person for movie.directors 
(both actors/directors use person table. Could this be a prob?)

   db.validate_and_insert(**movie)


                                                                            
                                                                    

   
   












On Wednesday, August 22, 2012 3:37:11 PM UTC-4, Niphlod wrote:
>
> Don't get if it is fixed, anyway I can't reproduce.
> BTW: it's always better to post a simple script to reproduce the issue 
> (simpler for you to check for copy/paste errors and for who helps)
>
> db.py
>
> db.define_table('genres',
>                 Field('name')
>                 )
>
> db.define_table('movies',
>             Field('name'),
>             Field('genres','string','list:reference genres', requires=
> IS_IN_DB(db, 'genres.id', '%(name)s [%(id)s]', multiple=True))
>             )
>
>
>
>
> shell
> >>> db.genres.insert(name='horror')
> 1
> >>> db.genres.insert(name='comedy')
> 2
> >>> db.movies.insert(name='terminator', genres=[1,2])
> 1
> >>> db.movies.insert(name='alien', genres=[2])
> 2
> >>> db.movies.insert(name='alien2', genres=[2])
> 3
> >>> print db(db.movies.id>0).select()
> movies.id,movies.name,movies.genres
> 1,terminator,|1|2|
> 2,alien,|2|
> 3,alien2,|1|
>
> >>> db.movies.insert(name='alien2', genres=[1,6])
> 4
> >>> print db(db.movies.id>0).select()
> movies.id,movies.name,movies.genres
> 1,terminator,|1|2|
> 2,alien,|2|
> 3,alien2,|1|
> 4,alien2,|1|6|
>
> >>> db.movies.validate_and_insert(name='alien2', genres=[1])
> <Row {'errors': <Row {}>, 'id': 5}>
> >>> db.movies.validate_and_insert(name='alien3', genres=[1])
> <Row {'errors': <Row {}>, 'id': 6}>
> >>> db.movies.validate_and_insert(name='alien3', genres=[1,2])
> <Row {'errors': <Row {}>, 'id': 7}>
> >>> print db(db.movies.id>0).select()
> movies.id,movies.name,movies.genres
> 1,terminator,|1|2|
> 2,alien,|2|
> 3,alien2,|1|
> 4,alien2,|1|6|
> 5,alien2,|1|
> 6,alien3,|1|
> 7,alien3,|1|2|
>
> >>> db.movies.validate_and_insert(name='alien3', genres=[1,6])
> <Row {'errors': <Row {'genres': 'value not in database'}>, 'id': None}>
>
>
>
>
>
> All is working ok. 
>
>       
>

-- 



Reply via email to