Uma das coisas boas dos frameworks modernos e trabalhar com fixtures.Se voce ainda nao sabe, fixtures sao a massa de dados inicial do seu banco de dados. Aqueles registros que voce inclui so pra testar suas consultas, lembra? Pois e; sao fixtures. E da um trabalho danado incluir novamente toda vez que voce precisa mudar alguma coisa no seu banco de dados, ne? As fixtures estao ai pra ajudar exatamente nisso.O esquema e o seguinte: voce define um conjunto de dados inicial. Dai, toda vez que as tabelas sao criadas, os dados sao inseridos automaticamente, pra voce nao ter que popular tudo na mao novamente.Isso te da liberdade (e seguranca) de apagar tudo e recomecar sem sujeira nas tabelas. A qualquer momento voce pode esvaziar ou recriar tudo. Sua massa de teste estara la novamente. E como se fosse um "quick restore" dos seus dados.Posso dizer que e uma mao na roda, mas e preciso tomar alguns cuidados para nao se perder. Eu usei fixtures pela primeira vez no Django e demorou um pouco ate cair a ficha sobre como isso funciona no web2py. De tao facil que e, as vezes a gente nem percebe.Voce pode trabalhar com fixtures no Web2py de 3 formas:a) Incluindo as linhas via script que e executado automaticamente;b) Importando de um arquivo CSV;c) Mesclando as duas formas anteriores.Os scripts do diretorio my_app/models sao executados em ordem alfabetica sempre que sua aplicacao e requisitada. Ou seja, a cada request. Portanto, ali e um bom lugar para colocar scripts que fazem alguma configuracao ou preparacao para sua aplicacao rodar. Bem, as fixtures fazem exatamente isso, certo? Elas preparam a massa de dados de sua aplicacao. Portanto, podemos iniciar as fixtures chamando-as a partir do script my_app/models/z_fixtures.py, por exemplo.Nesse script, voce pode incluir os dados iniciais se suas tabelas estiverem vazias, fazendo o seguinte teste:if db(db.produtos.id>0).count() == 0: db.produtos.insert(codigo=1234, nome='martelo') db.produtos.insert(codigo=1235, nome='parafuso') db.commit()Fazendo isso para todas as tabelas, voce tera seus dados recarregados sempre que esvazia-las.A vantagem desse metodo e que voce tem total dominio sobre a forma de inclusao dos dados. A desvantagem e que escreve muito codigo.A outra forma de trabalhar com fixtures, e usando o appadmin (my_app/appadmin) para inserir os dados e usar a opcao "exportar para csv", que tem na view de listagem dos dados.A vantagem desse metodo e que voce garante a inclusao de dados que passaram pelos validadores definidos e aproveita a exportacao para csv que ja vem com o Web2py.Uma desvantagem e que voce vai ter que importar os dados na mao sempre que suas tabelas forem zeradas. A outra e que, dependendo da mexida nas tabelas, suas fixtures podem nao carregar por diferenca de layout.Mas, sera que existe uma maneira de aproveitar e unir as duas formas abordadas? Sim, claro. O Web2py e flexivel e praticamente tudo que e possivel fazer pelo appadmin, tambem e possivel fazer via programacao.Entao, sugiro voce usar o appadmin para inserir os dados, exporta-los para csv pelo proprio appadmin e o metodo db.minha_tabela.import_from_csv_file() no script my_app/models/z_fixtures.py para importar os dados, se a tabela estiver vazia.Aproveite e veja