Turbogears2/sqlalChemy: Inserindo uma nova linha em uma mesa com uma chave primária de incremento automático

StackOverflow https://stackoverflow.com/questions/1366295

Pergunta

Sou um noob e estou tentando entender o TG2 e o SQLalChemy. O problema específico com o qual estou lutando no momento é como inserir uma nova linha em uma tabela quando o campo PK é configurado como auto -increment.

Por exemplo:

No meu arquivo myProject.model.myproject.py, eu defini a tabela a seguir:

class Dj(DeclarativeBase):
    __tablename__ = 'djs'

    #{ Columns

    djID = Column(Integer,  autoincrement=True, primary_key=True)
    djname = Column(String)
    djwebpage = Column(String)
    #}

No meu arquivo websetup.py, eu o povoto com alguns dados iniciais. Como esta é a primeira fila de dados, trapaceei e apenas defini o DJID como "1"

dj = model.Dj("1", "DJ Anonymous", "http://www.djanonymous.com")

Se eu quisesse que o websetup.py criasse uma segunda linha na tabela de DJs (via objeto dj), como eu faria isso?

Anteriormente, tentei várias coisas diferentes e não tive sorte. Por exemplo, se eu usasse o mesmo formato, mas incluía apenas 2 strings (para as colunas DJName e DJWebPage), recebo um erro reclamando de que não dei argumentos suficientes.

Obviamente, em última análise, preciso descobrir como criar um controlador para me permitir inserir novas entradas na tabela ... mas vou dar meu aprendizado um passo de cada vez e agradecer apenas por preencher com sucesso o tabela com várias linhas através do arquivo webetup.py. Espero que isso me dê as pistas para me permitir levar para o próximo passo.

Desde já, obrigado!

Foi útil?

Solução

Bem, seu problema é simplesmente (estou impressionado que não foi respondido por tanto tempo :).

  • Primeiro, por que nomear sua coluna de identificação "djid"? Por que não apenas ID?
  • Segundo você não Insira nele, é por isso que é um autoincrement.
  • Terceiro o primeiro básico O Tutorial da SA explica isso
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top