sqlalquimia:Error de atributo:El objeto 'tupla' no tiene el atributo 'insertar'
-
11-09-2019 - |
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
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.