Python 2.7 + flask错误存储到DB

时间:2014-08-05 18:04:09

标签: python python-2.7 flask flask-sqlalchemy psql

我正在尝试使用Python 2.7和flask框架将数据库的纬度,经度,消息和日期/时间插入到Web表单中。不幸的是,它没有正确存储在数据库中,我变得疯狂,因为我在代码中找不到bug。

有这个:

from datetime import datetime
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config.from_pyfile('conf.cfg')
db = SQLAlchemy(app)

# create DB structure 
class Sprava(db.Model):
    __tablename__ = 'spravy'
    id = db.Column('spravy_id', db.Integer, primary_key=True)
    lat = db.Column(db.Float)
    lon = db.Column(db.Float)
    text = db.Column(db.String)
    pub_date = db.Column(db.DateTime)

    def __init__(self, lat, lon, text):
        self.lat = lat
        self.lat = lon
        self.text = text
        self.pub_date = datetime.utcnow()

@app.route('/')
@app.route('/hello')

# index page
def index():
    return 'Hello sledovanie'

if __name__ == '__main__':
    app.run()


# web form
from flask import Flask, request, flash, url_for, redirect, render_template, abort 

@app.route('/sledovanie', methods=['GET', 'POST'])
def new():
    if request.method == 'POST':
            sprava = Sprava(request.form['lat'], request.form['lon'], request.form['text'])
            db.session.add(sprava)
            db.session.commit()
            return redirect(url_for('index'))
    return render_template('sledovanie.html')

当我使用这段简单的代码填写网络表单或调试时:

z = Sprava('1', '2', 'text_i')
db.session.add(z)
db.session.commit()

它无法正确地将它传送到DB(psql_9.2)。这是存储在数据库中的内容:

 spravy_id | lat | lon |  text  |          pub_date          
-----------+-----+-----+--------+----------------------------
         1 |   2 |     | text_i | 2014-08-03 17:02:43.829942

我没关系 lat是lon lon失踪了 文字确定 日期确定

你能看出我做错了吗?

1 个答案:

答案 0 :(得分:0)

您的__init__有拼写错误。

self.lat = lat
self.lat = lon

你看到上面的问题了吗?此外,由于这个错字,你根本没有设置self.lan

显然,这可能是一个错字,你知道修复。但为了以防万一,你需要做

def __init__(self, lat, lon, text):
    self.lat = lat
    self.lon = lon
    self.text = text
    self.pub_date = datetime.utcnow()