2016-08-17 100 views
2

在models.py我有定义:SQLAlchemy的插入数据不起作用

class slidephoto(db.Model): 
    __tablename__ = 'slide_photo' 
    id = db.Column(db.Integer, primary_key=True) 
    uid = db.Column(db.Integer, nullable=False) 
    photo = db.Column(db.String(collation='utf8_bin'), nullable=False) 

    def __init__(self, uid, photo): 
     self.uid = uid 
     self.photo = photo 

    def __repr__(self): 
     return "{'photo': " + str(self.photo) + "}" 

我选择这样的数据(例如):

@app.route('/index/') 
def index(): 
    user_photo = slidephoto.query.filter_by(uid=5).all() 

现在我想知道如何插入数据。我试过这个:

@app.route('/insert/') 
def insert(): 
    act = slidephoto.query.insert().execute(uid='2016', photo='niloofar.jpg') 
    return 'done' 

但它没有做我所需要的。我该怎么办?

我已阅读并测试了其他答案和解决方案,但它们都不适用于我的脚本。

================更新================

,如果有帮助,我不否定的。 ..但这里是app.py所有进口及CONFIGS:

import os, sys 
from niloofar import * 
from flask import Flask, request, url_for, render_template, make_response, redirect 
from flask_sqlalchemy import SQLAlchemy 
from werkzeug.utils import secure_filename 

app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql://myusername:[email protected]/mydbname' 
db = SQLAlchemy(app) 
app.config['UPLOAD_FOLDER'] = UPLOAD_FOLDER 
+0

你提交了吗? – univerio

+0

你提到什么意思? – Andishe

+0

'db.session.commit()' – univerio

回答

0

我写一个简单的演示是做插入的工作,你可以把它作为一个参考:

from flask import Flask 
from flask_sqlalchemy import SQLAlchemy 

db = SQLAlchemy() 


class FirstTest(db.Model): 
    __tablename__ = "first_test" 

    id = db.Column(db.Integer, primary_key=True) 
    name = db.Column(db.String, nullable=False) 

    def __init__(self, name): 
     self.name = name 


# Fill your db info here 
mysql_info = { 
    "user": "", 
    "pwd": "", 
    "host": "", 
    "port": 3306, 
    "db": "", 
} 

app = Flask(__name__) 

app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True 
# Here I use pymysql 
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://{0}:{1}@{2}:{3}/{4}".format(
    mysql_info["user"], mysql_info["pwd"], mysql_info["host"], 
    mysql_info["port"], mysql_info["db"]) 

db.__init__(app) 


@app.route("/") 
def hello(): 
    return "Hello World!" 

if __name__ == "__main__": 
    with app.test_request_context("/"): 
     record = FirstTest("test") 
     db.session.add(record) 
     db.session.commit() 
0

您应该使用查询作为一种方法。 Like'query()'

0

我希望我的回答能帮助你解决问题。

from sqlalchemy import create_engine, MetaData, Table, insert 
# I have tested this using my local postgres db. 
engine = create_engine('postgresql://localhost/db', convert_unicode=True) 
metadata = MetaData(bind=engine) 
con = engine.connect() 
act = insert(slidephoto).values(uid='2016', photo='niloofer.jpg') 
con.execute(act) 
+0

只是为了补充一点,当我测试这个时,我不得不通过定义字符串的长度来更改模型列属性,如下所示:photo = db.Column(db.String(30),nullable = False) – Jalal