sqlalchemy: Attribut: ‚tuple‘ Objekt hat kein Attribut ‚Einfügen‘
-
11-09-2019 - |
Frage
Ich spielte um eine einfache Haiku Website machen sqlalchemy und Masten verwenden. Es dauert im Grunde ein Haiku, schreibt sie in einer Datenbank und zeigt das Haiku. Das Problem erscheint, wenn ich die Daten aus dem Formular erhalten und versuche, es in eine Datenbank zu schreiben, geben Pylons mir diesen Fehler: Attribute: ‚tuple‘ Objekt hat kein Attribut ‚Einfügen‘, nachdem ich diese Codezeile ausgeführt wird: In = Selbst. haiku_table.insert (Wert = form_dict)
Haupt 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
und der Code für die Meta-Datei:
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)
Irgendwelche Ideen? Ich habe keine Ahnung
Lösung
Nun, es sieht aus wie Sie haiku_table
sind das Erstellen und nichts anderes zu tun es, bevor Sie die .Insert Funktion zu verwenden, die offensichtlich nicht Teil eines Tupels
Sieht aus wie wenn Sie eine Tabelle mit SQLAlchemy erstellen, möchten Sie das Format:
haiku_table = Table('haiku', metadata,
schema.Column('title', types.Text(), primary_key=True),
.... etc
)
Sie müssen auch Table
vom sqlachlemy Modul importieren.
Das macht haiku_table eine Tabelle Instanz von SQLAlchemy sein und nicht nur ein Tupel. Ich denke, das ist alles, was Sie fehlt.