Changes between Version 8 and Version 9 of DocPtDatabaseAPI


Ignore:
Timestamp:
Oct 20, 2006, 8:50:20 PM (18 years ago)
Author:
mario.caseiro at gmail.com
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • DocPtDatabaseAPI

    v8 v9  
    3939
    4040
     41
    4142.. _0.90: http://www.djangoproject.com/documentation/0_90/
     43
     44
    4245.. _0.91: http://www.djangoproject.com/documentation/0_91/
    4346
    4447Uma vez que você criou seus `data models`_, Django fornece automaticamente uma API de abstração de banco de dados para você criar, recuperar, atualizar e deletar objetos. Este documento descreve esta API .
     48
    4549
    4650
     
    125129Caso tenha um modelo com um campo ``AutoField`` mas você queira definir o ID de um objeto explicitamente quando o salvar, é só defini-lo explicitamente antes de salvá-lo, ao invés de deixar a auto atribuição do ID.
    126130
     131
    127132Exemplo::
    128133
     
    189194(``Managers`` são acessívei somente por via das classes modelos, e não pelas instâncias dos modelos, isto é para garantir a separação entre operações em níveis de tabelas ("table-level") das operações em níveis de registro ("record-level") )
    190195
     196
    191197O ``Manager`` é a principal fonte de ``QuerySets`` para um determinado modelo (model). Ele age como uma "raiz" das ``QuerySet`` que descrevem todos os objetos em tabelas de um determinado modelo no banco de dados.
    192198Por exemplo, ``Blog.objects`` é a ``QuerySet`` inicial que contém todos os objetos ``Blog`` no banco de dados.
     
    384390``distinct()``
    385391~~~~~~~~~~~~~~
     392
     393
    386394
    387395Retorna um novo ``QuerySet`` que utiliza ``SELECT DISTINCT`` na query SQL. Isto elimina linhas duplicadas dos resultados da query.
     
    506514
    507515
     516Especifique um ou mais dos seguintes ``params``, ``select``, ``where`` ou ``tables``. Nenhum dos argumentos é requerido, mas você deve usar pelo menos um deles.
     517
     518``select``
     519    The ``select`` argument lets you put extra fields in the ``SELECT`` clause.
     520    It should be a dictionary mapping attribute names to SQL clauses to use to
     521    calculate that attribute.
     522
     523    Exemplo::
     524
     525        Entry.objects.extra(select={'is_recent': "pub_date > '2006-01-01'"})
     526
     527
     528    Como resultado, cada objeto ``Entry`` terá um atributo extra, ``is_recent``, uma representação booleana de  ``pub_date`` de entrada é maior do que janeiro 1, 2006.
     529
     530    Django insere o trecho SQL dado diretamente na declaração ``SELECT``, assim a SQL resultante do exemplo acima seria::
     531
     532        SELECT blog_entry.*, (pub_date > '2006-01-01')
     533        FROM blog_entry;
     534
     535
     536    O exemplo seguinte é mais avançado; faz uma subquery para dar a cada objeto ``Blog`` resultante um atributo ``entry_count``, um inteiro da contagem de objetos associados da ``Entry``::
     537
     538        Blog.objects.extra(
     539            select={
     540                'entry_count': 'SELECT COUNT(*) FROM blog_entry WHERE blog_entry.blog_id = blog_blog.id'
     541            },
     542        )
     543
     544    (Neste caso particular, nós estamos abusando do fato que a query já conterá a tabela ``blog_blog`` no sua cláusula ``FROM`` .)
     545
     546O SQL resultante do exemplo acima seria::
     547
     548        SELECT blog_blog.*, (SELECT COUNT(*) FROM blog_entry WHERE blog_entry.blog_id = blog_blog.id)
     549        FROM blog_blog;
     550
     551Note que o parênteses requerido pela maioria dos engines de banco de dados ao redor das subqueries não são requeridos nas cláusulas ``select`` do Django . Note também que alguns backends de banco de dados , como algumas versões de MySQL, não suportam subqueries.
     552
     553``where`` / ``tables``
     554    Você pode definir as cláusulas SQL ``WHERE`` explícitamente  -- talvez para executar joins não-explícitos -- usando ``where``. Pode também manualmente adicionar tabelas a cláusula  SQL ``FROM`` usando ``tables``.
     555
     556    ``where`` e ``tables`` ambos levam uma lista de strings. Todos parâmetros ``where``  são adicionados de "AND" para qualquer outro critério de busca.
     557
     558    Exemplo::
     559
     560        Entry.objects.extra(where=['id IN (3, 4, 5, 20)'])
     561
     562    ...traduz (aproximadamente) na seguinte SQL::
     563
     564        SELECT * FROM blog_entry WHERE id IN (3, 4, 5, 20);
     565
     566
     567``params``
     568    Os parâmetros  ``select`` e ``where`` descritos acima podem usar o padrão de placeholders de string para banco de dados do Python -- ``"%s"`` para indicar parâmetros que o engine de banco de dados deve adicionar  automaticamente aspas. O argumento ``params`` é uma lista de todos os parâmetros extra a serem substituídos.
     569       
     570
     571    Exemplo::
     572
     573        Entry.objects.extra(where=['headline=%s'], params=['Lennon'])
     574
     575    Sempre  use ``params`` em vez de encaixar valores diretamente em ``select`` ou ``where`` porque os ``params`` assegurarão que os valores sejam adcionados de aspas corretamente de acordo com seu backend. (Por exemplo, as aspas serão escapadas corretamente.)
     576
     577    Ruim::
     578
     579        Entry.objects.extra(where=["headline='Lennon'"])
     580
     581    Bom::
     582
     583        Entry.objects.extra(where=['headline=%s'], params=['Lennon'])
     584
    508585
    509586}}}
Back to Top