sqlalchemy: AttributeError: el objeto 'tuple' no tiene atributo 'insert'

votos
0

Estaba jugando haciendo un sitio simple de haiku usando sqlalchemy y pilones. Básicamente se necesita un haiku, lo escribe en una base de datos y muestra el haiku. El problema aparece cuando obtengo los datos del formulario y lo intento escribir en una base de datos. Los pilones me dan este error: AttributeError: el objeto 'tuple' no tiene atributo 'insert' después de ejecutar esta línea de código: ins = self. haiku_table.insert (values ​​= form_dict)

Código principal:

import logging

from pylons import request, response, session, tmpl_context as c
from pylons.controllers.util import abort, redirect_to

from myku.lib.base import BaseController, render
from sqlalchemy.sql import select
import meta
import myku.lib.helpers as h

log = logging.getLogger(__name__)

class IndexController(BaseController):
    def __init__(self):
        self.haiku_table = meta.haiku_table
        self.conn = meta.engine.connect()
        BaseController.__init__(self)

    def index(self, genre, title):
        ss = select([self.haiku_table], self.haiku_table.c.genre==str(genre).lower(),  self.haiku_table.c.title==str(title).lower())
       result = self.conn.execute(ss)
       return result

    def new_haiku(self):
       return render('/newku.html')

    def submit(self):
        title = request.params.get('title')
        haiku = request.params.get('haiku')
        genre = request.params.get('genre')
        author = request.params.get('author')
        form_dict = {'title': title, 'haiku': haiku, 'genre': genre, 'author': author}
        ins = self.haiku_table.insert(values=form_dict)
        result = self.conn.execute(ins)
        return res

y el código para el meta archivo:

from sqlalchemy.engine import create_engine
from sqlalchemy import schema, types

metadata = schema.MetaData()

haiku_table = ('haiku', metadata,
               schema.Column('title', types.Text(), primary_key=True),
               schema.Column('haiku', types.Text()),
               schema.Column('genre', types.Text()),
               schema.Column('author', types.Text())
               )

engine = create_engine('sqlite:///F:\\MyKu\\myku\\haiku')
metadata.bind = engine

metadata.create_all(checkfirst=True)

¿Algunas ideas? no tengo ni idea

Publicado el 02/11/2009 a las 01:23
fuente por usuario
En otros idiomas...                            


1 respuestas

votos
1

Bueno, parece que estás creando haiku_tabley no haciendo nada más antes de intentar usar la función .insert que obviamente no es parte de una tupla

Parece que cuando creas una tabla con SQLAlchemy, quieres el formato:

haiku_table = Table('haiku', metadata,
           schema.Column('title', types.Text(), primary_key=True),
           .... etc
           )

También deberá importar Tabledesde el módulo sqlachlemy.

Esto hace que haiku_table sea una instancia de tabla de SQLAlchemy y no simplemente una tupla. Creo que eso es todo lo que te estás perdiendo.

Respondida el 02/11/2009 a las 01:30
fuente por usuario

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more