Pregunta

Estaba jugando a crear un sitio de haiku simple usando sqlalchemy y pilones.Básicamente toma un haiku, lo escribe en una base de datos y lo muestra.El problema aparece cuando obtengo los datos del formulario e intento escribirlos en una base de datos, Pylons me da este error:Error de atributo:El objeto 'tupla' no tiene el atributo 'insertar' después de ejecutar esta línea de código:ins = self.haiku_table.insert(valores=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 metaarchivo:

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

¿Fue útil?

Solución

Bueno, parece que va a crear haiku_table y no hacer nada más que decir antes de intentar utilizar la función .Insert lo que obviamente no es parte de una tupla

Parece que cuando se crea una tabla con SQLAlchemy, desea que el formato:

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

Usted tendrá que importar Table del módulo sqlachlemy también.

Esto hace haiku_table ser una instancia de Tabla de SQLAlchemy y no simplemente una tupla. Creo que eso es todo lo que se está perdiendo.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top