2009-11-02 4 views
0

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

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

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) 

Любые идеи? я понятия не имею,

ответ

1

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

выглядит, когда ты создать таблицу с SQLAlchemy, вы хотите, формат:

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

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

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

+0

К сожалению, вы правы – Joshkunz

+0

Не могу поверить, что я пропустил это спасибо !, btw Таблица является частью схемы, поэтому его schema.Table – Joshkunz