Flask 烧瓶上载,图像上载(无法渲染图像)

Flask 烧瓶上载,图像上载(无法渲染图像),flask,sqlalchemy,flask-sqlalchemy,flask-admin,flask-uploads,Flask,Sqlalchemy,Flask Sqlalchemy,Flask Admin,Flask Uploads,我正在尝试使用烧瓶上传显示图像。我已经在我的数据库中定义了我的上传表,设置了文件模型,我正在使用SQLAlchemy。 下面是我的数据库模型定义:完整的代码可以在我的github repo中找到 import sys import os from sqlalchemy import Boolean, Float, Text #importing classes from sqlalchemy module from sqlalchemy import Column, ForeignKey, I

我正在尝试使用烧瓶上传显示图像。我已经在我的数据库中定义了我的上传表,设置了文件模型,我正在使用SQLAlchemy。 下面是我的数据库模型定义:完整的代码可以在我的github repo中找到

import sys
import os
from sqlalchemy import  Boolean, Float, Text
#importing classes from sqlalchemy module
from sqlalchemy import Column, ForeignKey, Integer, String, TEXT

from sqlalchemy.ext.declarative import declarative_base

from sqlalchemy.orm import relationship


from sqlalchemy import create_engine, MetaData


Base = declarative_base()


class User(Base):

    __tablename__ = "user"

    id = Column(Integer, primary_key=True)
    name = Column(String(80), nullable=False)
    email = Column(String(50), nullable=False)
    picture = Column(String(250))


class University(Base):


    __tablename__ = "university"

    #column definitions for the university table
    id = Column(Integer, primary_key=True)
    name = Column(String(250), nullable=False)
    city = Column(String(80), nullable=False)
    user_id = Column(Integer, ForeignKey("user.id"))
    user = relationship(User)
    upload_id = Column(Integer, ForeignKey("upload.id"))
    upload = relationship(Upload)



class Upload(Base):

    __tablename__ = "upload"

    id = Column(Integer, autoincrement=True, primary_key=True)
    name = Column(TEXT(convert_unicode=True))
    url = Column(TEXT(convert_unicode=True))

class Room(Base):
    """
    this class corresponds to the table representation
    of room which is in the database
    """

    __tablename__ = "room"

    #column definitions for the room table
    owner_name = Column(String(90), nullable=False)
    id = Column(Integer, primary_key=True)
    size = Column(String(60))
    description = Column(String(250))
    price = Column(String(10))
    address = Column(String(250))
    owner_number = Column(String(15))
    university_id = Column(Integer, ForeignKey("university.id"))
    university = relationship(University)
    user_id = Column(Integer, ForeignKey("user.id"))
    user = relationship(User)
    upload_id = Column(Integer, ForeignKey("upload.id"))
    upload = relationship(Upload)


engine = create_engine("sqlite:///gotroomwithusers.db")


Base.metadata.create_all(engine)
    <div class="col-md-3">
        <input type="text" class="form-control" name="phoneNum" placeholder="Contact Number">
    </div>

    <div class="col-md-5">
        <input type="text" class="form-control" name="adress" placeholder="Address">
    </div>
</div><!--first row-->
</br>
<div class="row">
    <div class="col-md-2">
        <input type="text" class="form-control" name="roomSize" placeholder="Room Size">
    </div>

    <div class="col-md-2">
        <input type="text" class="form-control" name="roomPrice" placeholder="Room Price/Month">
    </div>
</div><!--second row-->
</br>
<div class="row">
    <div class="col-md-4" style="height: 100px">
        <input type="text" class="form-control" name="roomDescription" placeholder="Room Details" style="height: 100%">
        </br>
        <input type="file" name="upload">
    </div>
这是我上传图像的路线:

import os
from flask import Flask, render_template, request, redirect, url_for, flash, jsonify
from flask.ext.sqlalchemy import SQLAlchemy
from flask.ext.storage import get_default_storage_class
from flask.ext.uploads import delete, init, save, Upload


#import module for ORM
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from database_setup import Base, University, Room, Upload


#create an instance of Flask class with the name
#of the runnung application as the argument
app = Flask(__name__)
#app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
app.config['DEFAULT_FILE_STORAGE'] = 'filesystem'
app.config['UPLOADS_FOLDER'] = os.path.realpath('.') + '/static/'
app.config['FILE_SYSTEM_STORAGE_FILE_VIEW'] = 'static'
init(SQLAlchemy(app), get_default_storage_class(app))



#create connection to database
engine = create_engine("sqlite:///gotroomwithusers.db")
Base.metadata.bind=engine
DBSession = sessionmaker(bind=engine)
session=DBSession()

@app.route("/university/<int:university_id>/rooms/new/", methods=["GET", "POST"])
def newRoom(university_id):
    if request.method == "POST":
        save(request.files['upload'])
        aNewRoom = Room(owner_name=request.form["ownerName"], size=request.form["roomSize"]\
                       , description=request.form["roomDescription"], price=request.form["roomPrice"]\
                        , address=request.form["adress"], owner_number=request.form["phoneNum"], \
                        university_id=university_id)

        session.add(aNewRoom)
        session.commit()

        #feedback to user
        flash("New Room Created")       


        return redirect(url_for("showRooms", university_id=university_id, uploads=uploads))
    else:
        return render_template("newroom.html", university_id=university_id)
    <div class="col-md-3">
        <input type="text" class="form-control" name="phoneNum" placeholder="Contact Number">
    </div>

    <div class="col-md-5">
        <input type="text" class="form-control" name="adress" placeholder="Address">
    </div>
</div><!--first row-->
</br>
<div class="row">
    <div class="col-md-2">
        <input type="text" class="form-control" name="roomSize" placeholder="Room Size">
    </div>

    <div class="col-md-2">
        <input type="text" class="form-control" name="roomPrice" placeholder="Room Price/Month">
    </div>
</div><!--second row-->
</br>
<div class="row">
    <div class="col-md-4" style="height: 100px">
        <input type="text" class="form-control" name="roomDescription" placeholder="Room Details" style="height: 100%">
        </br>
        <input type="file" name="upload">
    </div>

如果需要,我可以提供完整的代码

您需要首先使用以下代码片段创建表:Upload.metadata.create_allbind=enginehi@Balthazar Rouberol,我添加了该代码片段,但出现了相同的错误。如果有帮助的话,请访问MyGithub repo以获取代码文件
    <div class="col-md-3">
        <input type="text" class="form-control" name="phoneNum" placeholder="Contact Number">
    </div>

    <div class="col-md-5">
        <input type="text" class="form-control" name="adress" placeholder="Address">
    </div>
</div><!--first row-->
</br>
<div class="row">
    <div class="col-md-2">
        <input type="text" class="form-control" name="roomSize" placeholder="Room Size">
    </div>

    <div class="col-md-2">
        <input type="text" class="form-control" name="roomPrice" placeholder="Room Price/Month">
    </div>
</div><!--second row-->
</br>
<div class="row">
    <div class="col-md-4" style="height: 100px">
        <input type="text" class="form-control" name="roomDescription" placeholder="Room Details" style="height: 100%">
        </br>
        <input type="file" name="upload">
    </div>
OperationalError: (OperationalError) no such table: 
upload u'INSERT INTO upload (name, url) VALUES (?, ?)' 
(u'el-caffinito_3.jpg', u'/static/el-caffinito_3.jpg')