Question

Je jouais autour de faire un site simple de Haiku utilisant sqlalchemy et pylônes. Il faut essentiellement un haïku, il écrit dans une base de données et affiche le haïku. Le problème apparaît lorsque je reçois les données du formulaire et essayer de l'écrire à une base de données, Pylônes me donner cette erreur: AttributeError: objet « tuple » n'a pas d'attribut « insert » après je lance cette ligne de code: ins = auto. haiku_table.insert (valeurs = form_dict)

Main Code:

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

et le code pour le fichier meta:

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)

Toutes les idées? Je n'ai pas la moindre idée

Était-ce utile?

La solution

Eh bien, il semble que vous créez haiku_table et ne fait rien d'autre à essayer avant d'utiliser la fonction .insert qui est évidemment pas partie d'un tuple

On dirait que lorsque vous créez une table avec SQLAlchemy, vous voulez que le format suivant:

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

Vous devez importer Table à partir du module sqlachlemy ainsi.

Cela rend haiku_table être une instance de table de SQLAlchemy et non pas simplement un tuple. Je pense que c'est tout ce que vous manquez.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top