sqlalchemy:Ошибка атрибута:Объект «кортеж» не имеет атрибута «вставка»

StackOverflow https://stackoverflow.com/questions/1659160

  •  11-09-2019
  •  | 
  •  

Вопрос

Я пытался создать простой сайт хайку, используя sqlalchemy и pylons.По сути, он берет хайку, записывает его в базу данных и отображает хайку.Проблема возникает, когда я получаю данные из формы и пытаюсь записать их в базу данных, Pylons выдает мне эту ошибку:Ошибка атрибута:Объект «кортеж» не имеет атрибута «вставка» после запуска этой строки кода:ins = self.haiku_table.insert(values=form_dict)

Основной код:

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

и код метафайла:

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)

Есть идеи?я понятия не имею

Это было полезно?

Решение

Ну, похоже, вы создаете haiku_table и не делая с ним ничего больше, прежде чем попытаться использовать функцию .insert, которая, очевидно, не является частью кортежа

Похоже, когда вы создаете таблицу с помощью SQLAlchemy, вам нужен формат:

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

Вам нужно будет импортировать Table из модуля sqlachlemy.

Это делает haiku_table экземпляром таблицы SQLAlchemy, а не просто кортежем.Я думаю, это все, чего тебе не хватает.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top