Flask 和 Sqlite3 的 INSERT 仅在本地工作

2024-04-26 20:35:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用Flask和Sqlite3。我已经编写了一个代码,将3个值插入到Sqlite3数据库中。你知道吗

    from flask import Flask, render_template, g, request, redirect, url_for, flash, session
    from functools import wraps
    from flask_bootstrap import Bootstrap


    from wtforms import Form, StringField, PasswordField, DateTimeField
    from wtforms.validators import InputRequired

    import os
    import sqlite3
    from datetime import datetime


    app = Flask(__name__)
    Bootstrap(app)

    app.secret_key = os.urandom(24)
    app.config.from_object(__name__)

    D_candata = '/var/www/FlaskApp/py/static/database/CANData.db'
    D_acc = '/var/www/FlaskApp/py/static/database/acc.db'
    D_appo ='/var/www/FlaskApp/py/static/database/appo.db'



    class LoginForm(Form):
        username = StringField(validators=[InputRequired(message='Username ist noch leer')])
        password = PasswordField(validators=[InputRequired(message='Password ist noch leer')])

    class DateForm(Form):
        bdt = DateTimeField(validators=[InputRequired(message='Bitte eingeben')], format = '%d-%m-%Y %H:%M' )
        edt = DateTimeField(validators=[InputRequired(message='Bitte eingeben')], format = '%d-%m-%Y %H:%M' )


    def connect_db(db):
        return sqlite3.connect(db)

    def loggin_required(funct):
        @wraps(funct)
        def wrap(*args, **kwds):
            if 'logged_in' in session:
                return funct(*args, **kwds)
            else:
                flash('log in!!')
                return redirect(url_for('login'))
        return wrap



    @app.route('/')
    @loggin_required
    def index():
        g.db = connect_db(D_candata)
        cur = g.db.execute('SELECT * FROM CANData LIMIT 1;')
        data = [dict(Timestamp=row[0], BatteryVoltage=row[1], BatteryAmperage=row[2], BatteryLoad=row[3], Range=row[4], Speed=row[5], Mileage=row[6]) for row in cur.fetchall()]
        g.db.close()
        return render_template ("/html/index.html", data=data)

    @app.route('/reservierung/', methods = ["GET","POST"])
    @loggin_required
    def reservie(): 
        form = DateForm(request.form)
        b_date = ""
        e_date = ""
        if request.method == "POST" and form.validate() :
            b_date = form.bdt.data
            e_date = form.edt.data
            if b_date > e_date :
                flash('Bitte den Zeitraum korrigieren ')

            else:

                account = 'admin'
                try:
                    con = connect_db(D_appo) 
                    cur = con.cursor()
                    flash('ok1')   
                    cur.execute("INSERT INTO appo_info (account, b_date, e_date) VALUES (?, ?, ?)",(account, b_date, e_date)) #???
                    flash('ok')
                    con.commit()
                    con.close() 
                except:
                    flash('500')
                    con.rollback()


        return render_template('/html/reservie.html', form=form) 


    if __name__ == "__main__":
       app.run(debug=True)

我想问题是从

def reservie():
...
 cur.execute("INSERT INTO appo_info (account, b_date, e_date) VALUES (?, ?, ?)",(account, b_date, e_date))

因为我用闪光灯来显示哪里出了问题。你知道吗

当我在电脑上使用chrome时,它只显示('ok1')和('500')(服务器是raspberry)。 但当我在raspberry测试它时,它确实显示了(“好”)。数据显示在数据库中。你知道吗

在raspberry pi我能读能写。但在电脑上我只能看书

我确信这不是身份验证的问题。数据库和其他数据库已经是“777”

我不能使用调试模式,因为它不是本地的。有人有主意吗?你知道吗

太多了


Tags: fromimportformappdbdatadatereturn